Wie verwende ich ein Standard-Array, wenn keine Befehlszeilenargumente angegeben sind?

8

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?

%Vor%     
Pascal 10.09.2017, 04:55
quelle

2 Antworten

6

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.

    
zdim 10.09.2017, 05:14
quelle
0

Schreiben Sie es einfach als zwei Zeilen.

%Vor%     
Dave Cross 11.09.2017 09:34
quelle

Tags und Links