• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[perl] eval

catweasel

Hacker
Hi!

Wie muss ich die eval-Zeile schreiben, damit das Skript funktioniert (es sollte 1 2 3 4 ausgegeben werden)?

Code:
#!/usr/bin/perl -w

use strict;

my $a=1;
my $b=2;
my $c=3;
my $d=4;
my $w;

foreach ('a'..'d')
	{
	$w=eval ???;
	print "$w\n";
	}
 
OP
C

catweasel

Hacker
Hatte ich versucht und es ging nicht.
Jetzt geht es. Mal schaun, was ich übersehen habe.

Mein Verdacht: nur mit geschweiften Klammern bzw. einfachen Anführungszeichen versucht.
 
eval ist ja nicht so berauschend.
Code:
foreach ("a".."d") {
       $w = $$_;
       print "$w\n";
}
Allerdings ist das zurecht verpönt, denn für nicht-fixierte Namen nimmt man stattdessen assoziative Arrays.
Code:
%w = (
        "a" => 1,
        "b" => 2,
);
foreach ("a".."d") {
        print $w{$_}, "\n";
}
 
catweasel schrieb:
jengelh schrieb:
eval ist ja nicht so berauschend.
Code:
foreach ("a".."d") {
       $w = $$_;
       print "$w\n";
}
Soll das so sein, wie es hier steht, oder fehlt "eval"?
Nein das ist schon richtig so. (Steht ja auch obendrüber "eval ist ...", und dementsprechend ohne eval.)
Meinst du mit
Code:
 meine Curlies-Schreibweise?[/quote]
Die 3. Möglichkeit wollte ich lieber nicht präsentieren ... musst ja nicht auf schlechte Gedanken kommen ;-)
 
OP
C

catweasel

Hacker
Wen ich das so schreibe

Code:
#! 	/usr/bin/perl 	-w

use 	strict;
use 	diagnostics;

my $a=1;
my $b=2;
my $c=3;
my $d=4;
my $w;

foreach ("a".."d") {
       $w = $$_;
       print "$w\n";
}

bekomme ich diese Fehlermeldung:

Code:
mm@linux1:~> ./perl.pl
Can't use string ("a") as a SCALAR ref while "strict refs" in use at ./perl.pl
        line 15 (#1)
    (F) Only hard references are allowed by "strict refs".  Symbolic
    references are disallowed.  See perlref.

Uncaught exception from user code:
        Can't use string ("a") as a SCALAR ref while "strict refs" in use at ./perl.pl line 15.
 at ./perl.pl line 15

Was ist das für eine dritte Möchlichkeit. (glaube nicht, dass perl-code mich auch schlechte Gedanken bringt)
 
Oben