Thread grep inputfile geht nicht mit übergebener Variablen (3 answers)
Opened by allapow at 2008-06-01 14:06

FoolAck
 2008-06-01 16:03
#110541 #110541
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Ich melde hiermit Zweifel an der Sinnhaftigkeit folgenden Konstrukts an:
Code: (dl )
1
2
3
while(<INPUTFILE>)
{
my $back = grep {$_ =~/$regexp/} <INPUTFILE>;

Wth, nicht nur, dass man filehandles eigentlich nicht in Listenkontext verwenden soll, hier wird erst Zeilenweise in der while-Schleife über "INPUTFILE" iteriert (erste Zeile) und dann der Rest durch den grep-Aufruf "geslurpt". (? Bin mir nicht völlig sicher, sollte aber ungefähr hinkommen.)
Außerdem arbeitet grep nicht nur mit Listen, sondern returned auch eine. Werden also zwei Einträge gefunden, wird eine 2-elementige-Liste returned, in skalarem Kontext also 2. Deswegen solltest du vielleicht $a nicht direkt auf Gleichheit mit 1 überprüfen... (Und überhaupt, abgesehen davon, dass "$a" und "$b" normalerweise für die sort-Funktion in perl reserviert sind, sinds auch verdammt schlechte Variablennamen...)

Was der Threadersteller will klingt eigentlich sehr einfach:
Code: (dl )
1
2
3
4
5
6
7
use strict;
use warnings;

my $re = 'foo';
print "hihi" if grep {/$re/} ("bla", "blub", "foo", "bar");
$re = 'baz';
print "hihi" if grep {/$re/} ("bla", "blub", "foo", "bar");

Wenn man Variablen als Regexes verwenden will kann/sollte man übrigens den qr (quoted regex) Operator benutzen:
Code: (dl )
my $regex = qr/bla*bl[u0o]{0,5}b/;

Oder so..

Ansonsten @"Wo gibts Hilfe?":
Hier werden sie geholfen!
(Sollte auch als manpages offline verfügbar sein, aber manche mögen html halt lieber.. (Auch die htmls und pdfs kann man sich btw für offline Betrachtung downloaden.))

View full thread grep inputfile geht nicht mit übergebener Variablen