Was ist der Unterschied zwischen my ($variableName)
und my $variableName
in Perl? Was zu den Klammern?
Antwort
Der wichtige Effekt ist, wenn Sie die Variable in der gleichen Zeit zu initialisieren, dass Sie es erklären:
my ($a) = @b; # assigns $a = $b[0]
my $a = @b; # assigns $a = scalar @b (length of @b)
Das andere Mal ist es wichtig ist, ist, wenn Sie mehrere Variablen zu deklarieren.
my ($a,$b,$c); # correct, all variables are lexically scoped now
my $a,$b,$c; # $a is now lexically scoped, but $b and $c are not
Die letzte Anweisung erhalten Sie einen Fehler, wenn Sie use strict
geben.
Also im Wesentlichen: die Klammern 1. bieten Listenkontext und 2. verteilen den Operator oder die Funktion über mehrere Werte. – Ether
# 2 ist technisch falsch und möglicherweise irreführend. Es ist insofern falsch, als die Deklaration mit den Parens funktioniert, indem eine lexikalische Liste statt eines lexikalischen Skalars definiert wird. Es ist irreführend, dass ein Anfänger "die Klammern ... lesen kann, verteilt den Operator oder die Funktion über mehrere Werte" und erwartet, dass '($ x, $ y) = (1, 2) + 3' die Werte 4 zu' zuordnen $ x' und 5 bis '$ y', indem" + Operator über mehrere Werte verteilt wird ". (In Wirklichkeit weist diese Anweisung 5 $ x und nichts $ y zu.) –
# 1 ist auch nicht vollständig korrekt. Die Parens auf der linken Seite einer Zuweisung stellen einen Listenkontext zur Verfügung, was jedoch nicht bedeutet, dass sie einen Listenkontext überall sonst bereitstellen. –
Weitere Informationen zum Operator my
finden Sie unter perdoc perlsub. Hier ist ein kleiner Auszug:
Synopsis:
my $foo; # declare $foo lexically local
my (@wid, %get); # declare list of variables local
my $foo = "flurp"; # declare $foo lexical, and init it
my @oof = @bar; # declare @oof lexical, and init it
my $x : Foo = $y; # similar, with an attribute applied
Als andere Antwort und Kommentare erklären Verwendung von Klammern Listenkontext auf die Variable bereitstellen. Unten finden Sie ein Code-Snippet, das mit der Perl-Funktion split
weitere Erläuterungen bietet.
use strict;
my $input = "one:two:three:four";
# split called in list context
my ($out) = split(/:/,$input);
# $out contains string 'one'
#(zeroth element of the list created by split operation)
print $out,"\n";
# split called in scalar context
my $new_out = split(/:/,$input);
# $new_out contains 4 (number of fields found)
print $new_out,"\n";
Die kurze Antwort ist, dass Klammern Kraft Listenkontext, wenn auf der linken Seite eines =
verwendet.
Jeder der anderen Antworten weist auf einen speziellen Fall hin, in dem dies einen Unterschied macht. Wirklich, Sie sollten perlfunc lesen, um eine bessere Vorstellung davon zu bekommen, wie sich Funktionen anders verhalten, wenn sie im Listenkontext im Gegensatz zum skalaren Kontext aufgerufen werden.
- 1. Doppelpunkt in Charge Variablenname
- 2. Erhalten Variablenname der Tabelle
- 3. Warum ist der Variablenname "$ scope" notwendig?
- 4. JS Variablenname
- 5. WebService: Unterschied zwischen meinem PC und Server
- 6. Was ist der Unterschied zwischen "||" und "oder" in Perl?
- 7. Was ist der Unterschied zwischen grep und map in Perl?
- 8. Was ist der Unterschied zwischen 'for' und 'foreach' in Perl?
- 9. Punkt in Variablenname
- 10. Javascript Variablenname enthält Funktionsparameter
- 11. Klammer nach Variablenname C++
- 12. Einstellung Zeichenfolge als Variablenname
- 13. Javascript, $ .ajax, Variablenname
- 14. gwt jsni Variablenname verschleiert
- 15. C - sprintf Druck Variablenname
- 16. Set String als Variablenname
- 17. ist dies ein guter Variablenname in JavaScript?
- 18. Variablenname aus Vorlagenargument?
- 19. Assign Variablenwert als Variablenname
- 20. Perl Tkx, Was ist der Unterschied zwischen "button" und "ttk__button"?
- 21. Compass sprite-map Variablenname?
- 22. String zu Variablenname
- 23. Was ist der Unterschied zwischen Perl-Modulen Autodie und Fatal?
- 24. C# Variablenname String
- 25. Freimarker - Variablenname mit Punkt
- 26. Unerwartetes Symbol CS1525 Variablenname
- 27. Powershell iterate Variablenname in Funktion
- 28. g ++ Unicode-Variablenname
- 29. Mehrfachvererbung: gleicher Variablenname
- 30. 'Standard' als Variablenname
Interessante Perl-Mönche antworten [hier] (http://www.perlmonks.org/?node_id=693666), die schließlich die Verwendung von Parens in Deklarations-Zuweisungen als ein Ende um plumpen Operationspriorität kocht. – ruffin
Volle, detaillierte Antwort hier: [Mini-Tutorial: Scalar gegen List Assignment Operator] (http://www.perlmonks.org/?node_id=790129). – ikegami