Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]1329[/thread]

Bug in Perl ?

Readers: 2


<< >> 7 entries, 1 page
BrownWolf
 2003-08-28 07:41
#16189 #16189
User since
2003-08-15
308 articles
BenutzerIn
[default_avatar]
Hallo,

kann es sein das es ein Bug in Perl gibt mit den HERE Dokumenten ?

Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w
use strict;

print<<"EOT";
bla
EOT

######


Erzeugt keine Fehlermeldung.
Aber:

Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w
use strict;

    print<<"EOT";
    bla
    EOT

######


Wenn man das EOT einrückt in die Mitte dann sagt er mir:
Code: (dl )
Cant find string terminator "EOT" anywhere before EOT


Ich find das nicht sehr praktisch.\n\n

<!--EDIT|BrownWolf|1062042254-->
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
dominicn
 2003-08-28 08:05
#16190 #16190
User since
2003-08-08
327 articles
BenutzerIn
[default_avatar]
ein bug ist das nicht, da es sich um ein dokumentiertes feature handelt (habe gerade keine zeit und lust es herauszusuchen). jedenfalls ist schon immer ganz klar, das der terminator ganz am anfang der zeile zu stehen hat und da auch sonst nichts zu stehen hat.
das scheint manchmal etwas starrsinnig, aber so ist es eben noch eindeutiger und somit kannst du im here-dokument nochmehr machen ...
Strat
 2003-08-28 12:18
#16191 #16191
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
[quote=BrownWolf,28.08.2003, 05:41]
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w
use strict;

    print<<"EOT";
    bla
    EOT

######
[/quote]
vor und hinter dem EOT duerfen/muessen zwei zeilenumbrueche kommen, sonst nichts. Deshalb verwende ich HERE-Dokumente kaum noch, sondern mehr qq~...~ (oder aehnliches):

Code (perl): (dl )
1
2
3
4
5
6
#!/usr/bin/perl -w
use strict;

    print qq~
    bla
    ~;

Dann darf halt kein ~ in der Zeichenkette vorkommen. Anstelle von ~ kann man auch (fast) jedes andere Zeichen verwenden, z.B. | # + * () [] {} <>

qq~...~ verhaelt sich wie "..."
q~...~ verhaelt sich wie '...'
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Relais
 2003-08-28 12:37
#16192 #16192
User since
2003-08-06
2239 articles
ModeratorIn
[Homepage] [default_avatar]
Es gibt natürlich auch noch so ein CPAN-Modul daß es erlaubt, Here-Dokumente einzurücken. Hab leider vergessen, wie es heißt, aber wer suchet, der wird finden.

Natürlich geht das auf Kosten der Information aus führendem Whitespace... das ist einer der Gründe, warum Here-Dokumente so sind, wie sie sind. Der andere ist, daß dann das Trennzeichen im Text selbst nicht mehr auftauchen darf, ebenso wie bei Strats Vorschlag.
Erst denken, dann posten -- Frankfurt.pm-Treffen am Dienstag 07.01.2020 im Café Diesseits
22. Deutscher Perl-Workshop 04. bis 06.03.2020 in Erlangen.
Frankfurt Perl-Workshop 2020-1 ca. Mai-Juni 2020 im Haus der Jugend

Winter is Coming
Dubu
 2003-08-29 02:35
#16193 #16193
User since
2003-08-04
2145 articles
ModeratorIn + EditorIn

user image
Suchen kann man z.B. unter perldoc -q "here document". ;-)

Wenn man das Ende-Tag unbedingt einruecken moechte, muss man einfach ein eingeruecktes definieren:
Code: (dl )
1
2
3
4
5
6
7
8
print <<"    ENDEGELAENDE";
   Dies ist Text.
   Und hier kommt das Ende.
   ENDEGELAENDE

_ _END_ _
   Dies ist Text.
   Und hier kommt das Ende.

Mit den Leerzeichen verzaehlen darf man sich dann natuerlich auch nicht...
BrownWolf
 2003-08-29 02:49
#16194 #16194
User since
2003-08-15
308 articles
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
     print DAT qq~zeile1
    zeile2
    zeile3
    ~;


Da hatte ich in der Datei aufeinmal:

Code: (dl )
1
2
3
  zeile1
zeile2
zeile3


Obwohl es an den Anfang der Datei geschrieben werden sollte und nich Zwei leerzeichen davor. Letztendlich hab ich dann doch das HERE Document benutzt ^^
Code (perl): ()
1
2
3
sub _{s;;xrqIpiql\\{}p{pl{R>rl{N{}gjwpkssq]>rl{N;;;*{{}=*{_};;
&#36{{}={q{{{}}}=>[reverse+split+reverse+q;}{;]};&#36{{}->{q{{{}}}}->[@{{}];}
&#36{{}=reverse+_(q{{}}=>q{{}})^chr(30)x+length&_(q{{}}=>,q{{}})and+print;
Relais
 2003-08-29 13:35
#16195 #16195
User since
2003-08-06
2239 articles
ModeratorIn
[Homepage] [default_avatar]
@dubu: schön!
Erst denken, dann posten -- Frankfurt.pm-Treffen am Dienstag 07.01.2020 im Café Diesseits
22. Deutscher Perl-Workshop 04. bis 06.03.2020 in Erlangen.
Frankfurt Perl-Workshop 2020-1 ca. Mai-Juni 2020 im Haus der Jugend

Winter is Coming
<< >> 7 entries, 1 page



View all threads created 2003-08-28 07:41.