Thread Perl schleife per tastendruck beenden (15 answers)
Opened by DonPadrio at 2014-02-14 12:24

Linuxer
 2014-02-17 13:05
#173585 #173585
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
2014-02-17T11:54:00 Muffi
while ( my $line = <STDIN> ) {  suggeriert beim Lesen eine Abbruchbedingung, ist aber keine. Dann würd ich das auch klar machen.


Warum siehst Du das so? Kannst Du genauer erläutern?

IMHO steckt da sehr wohl eine Abbruchbedingung drin; sie steht nur nicht explizit da ;-)

Siehe Perldoc:perlop:
perldoc perlop
...
The following lines are equivalent:
Code (perl): (dl )
1
2
3
4
5
6
7
    while (defined($_ = <STDIN>)) { print; }
    while ($_ = <STDIN>) { print; }
    while (<STDIN>) { print; }
    for (;<STDIN>;) { print; }
    print while defined($_ = <STDIN>);
    print while ($_ = <STDIN>);
    print while <STDIN>;


This also behaves similarly, but assigns to a lexical variable instead of to $_ :

Code (perl): (dl )
    while (my $line = <STDIN>) { print $line }


In these loop constructs, the assigned value (whether assignment is automatic or explicit) is then tested to see whether it is defined. The defined test avoids problems where the line has a string value that would be treated as false by Perl; for example a "" or a "0" with no trailing newline. If you really mean for such values to terminate the loop, they should be tested for explicitly:

Code (perl): (dl )
1
2
    while (($_ = <STDIN>) ne '0') { ... }
    while (<STDIN>) { last unless $_; ... }

In other boolean contexts, <FILEHANDLE> without an explicit defined test or comparison elicits a warning if the use warnings pragma or the -w command-line switch (the $^W variable) is in effect.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Perl schleife per tastendruck beenden