2012-10-09 5 views
20

UnterWarum String Multiplikation ist Perl nicht auf undef warnen?

use strict; 
use warnings; 
my $foo = undef; 

die Ausdrücke

$foo . '' 

und

"$foo" 

produzieren beide

Use of uninitialized value $foo in ... at ... 

aber der folgende Ausdruck gibt th e leere Zeichenkette ohne Vorwarnung:

$foo x 1 

Jeder weiß, warum? Ich meine, es ist cool, ein schönes stringification Idiom zu haben ($_ x 1 ist sehr viel kürzer als defined ? "$_" : ''), aber es fühlt sich ein bisschen komisch.

+2

Ich bin sicher, es war nicht beabsichtigt, zumindest nicht zu Beginn. – ikegami

+0

'perldoc perlop' (Suche nach" Multiplikative Operatoren ") sagt nichts über das Verhalten von' x' mit einem 'undef' linken Operanden aus. Ich stimme zu, dass es wahrscheinlich unbeabsichtigt ist. –

Antwort

9

Ich sah einmal eine Show mit einer Szene in einem Gesetz Schulklasse. Der Ausbilder stellte seinen Studenten zwei ähnliche Fälle vor und fragte, warum sie zu anderen Entscheidungen führten. Es ist, weil die Entscheidungen von Richtern getroffen wurden, und Richter sind Leute, erklärte er schließlich.

Das warnen sollte. Die Entwickler, die an Perl arbeiten, sind Leute. Führen Sie perlbug aus, um einen Fehlerbericht zu senden, wenn Sie möchten.

+1

+1 für Film/Fernsehen Weisheit. – pilcrow