Schrift
[thread]1329[/thread]

Bug in Perl ?

Leser: 2


<< >> 7 Einträge, 1 Seite
BrownWolf
 2003-08-28 07:41
#16189 #16189
User since
2003-08-15
308 Artikel
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 Artikel
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 Artikel
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
2244 Artikel
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 --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Dubu
 2003-08-29 02:35
#16193 #16193
User since
2003-08-04
2145 Artikel
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 Artikel
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
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
@dubu: schön!
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
<< >> 7 Einträge, 1 Seite



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