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

[perl]: Runde Klammern bei Funktionen GELÖST

styyxx

Member
Hallo,

warum funktioniert das?
Code:
perl -e '$atr = ( stat ( "dateiname" ) )[9]; print "$atr\n";'

Anscheinend hab ich die Basics verschlafen...
Mir ist wirklich nicht klar warum eine Funktion, die normalerweise eine Liste zurückgibt, einen skalaren Wert zurückgibt wenn ich sie in runde Klammern einschließe.

Danke für die hoffentliche Erhellung
Grüße
micha
 

regexer

Advanced Hacker
styyxx schrieb:
warum funktioniert das?
Code:
perl -e '$atr = ( stat ( "dateiname" ) )[9]; print "$atr\n";'
Von der zurückgegebenen Liste nimmst du die 10. Ausprägung (= Position 9) uns schreibst sie in $atr.

Das ist im Prinzip das gleiche wie:
Code:
perl -e '@a=(1,2,3);print $a[1] . "\n"'
... nur eben ohne zwischen-Variable.

Alles klar? Oder habe ich deine Frage falsch verstanden?
 
OP
S

styyxx

Member
Hi notoxp,

jetzt wo ich deine Antwort gelesen habe und nochmal in mich gegangen bin ist es mir klar :)

Das ich das zehnte Element anspreche war mir klar, nur das ich das direkt bei einer Liste angeben kann noch nicht. Macht ja auch meist keinen Sinn.
Man kann also immer ein Array auch direkt als Liste schreiben und diese dann auch mit einem Index verwenden, was ja eigentlich auch logisch ist:
Code:
perl -e 'print ( ( 1, 2, 3 )[1] . "\n" );'
Bei sowas wie der localtime() Funktion ist das aber schon praktisch, wenn man eh nur an ein oder zwei Werten interresiert ist, denn anstatt:
Code:
my (    $second,
        $minute,
        $hour,
        $day_of_month,
        $month,
        $year,
        $day_of_week,
        $day_of_year,
        $summertime) = localtime(time);
schreibt man einfach:
Code:
my $month = (localtime(time))[4]

Danke für deine Antwort.

Grüße
micha
 

regexer

Advanced Hacker
styyxx schrieb:
schreibt man einfach:
Code:
my $month = (localtime(time))[4]

Ich verwende das sehr oft in Verbindung mit split. Wenn man nur bestimmte Spalten haben will schreibt man in etwa so:
Code:
perl -e '($b,$d,$e,$f)=(split /;/,"a;b;c;d;e;f;g")[1,3..5]; print "$d\n"'
 
Oben