Das Folgende scheint korrekt zu funktionieren, wenn keine Befehlszeilenargumente angegeben sind, aber wenn sie alle sind, bekomme ich die Anzahl der gelieferten Argumente, nicht die Argumente selbst. Es scheint @ARGV
wird skaliert um ||
. Ich habe auch versucht, or
und //
mit ähnlichen Ergebnissen zu verwenden. Was ist der richtige Operator hier?
Der ||
-Operator setzt den skalaren Kontext durch die Art von was es macht
Binary
"or"
gibt die logische -Disjunktion der beiden umgebenden Ausdrücke zurück. Es entspricht||
mit Ausnahme der sehr niedrigen Priorität.
(Betonung meiner). Wenn der linksseitige Operand ein Array ist, erhält er die Länge des Arrays.
Wenn das jedoch 0 ist, wird die rechte Seite nur ausgewertet
Dies bedeutet, dass es kurzschließt: Der rechte Ausdruck wird nur ausgewertet, wenn der linke Ausdruck falsch ist.
was in C-Style Logical oder in perlop
Skalar oder Listenkontext wird bis zum rechten Operanden propagiert, wenn er ausgewertet wird.
so erhalten Sie die Liste in diesem Fall.
Es gibt keinen Operator, der das ausführen kann, was Ihre Aussage verlangt. Das nächstgelegene könnte
sein %Vor% aber es gibt bessere und systemischere Wege, mit @ARGV
umzugehen.