2015-07-17 10 views
5

Sono rimasto sorpreso quandoDash (o meno o sottrazione), seguita da lettera (o nome di funzione) che causa errore di sintassi in Perl

sub f{1}; 

my $answer = 1-f(1); 

mi ha dato un errore di sintassi in Perl, quando mi aspettavo per eseguire la sottrazione. L'aggiunta di uno spazio ha funzionato correttamente:

sub f{1}; 

my $answer = 1- f(1); 

Perché questo causa un errore di sintassi in Perl? C'è un'ambiguità? Il trattino è interpretato come parte del nome della funzione?

risposta

9

-f verifica se un file è un file semplice, quindi non ha senso perl in quanto non visualizza il segno -. Questo è il motivo per cui funziona come ci si aspetta, in quanto non esiste un test -fo.

sub fo{1} my $answer = 1-fo(1); 

(né v'è +f prova)

sub f{1} my $answer = 1+f(1); 
+1

Un altro caso d'uso per l'& '' sigillo! – mob

+6

Più probabile, un argomento contro i nomi di subroutine a lettera singola :-) –

+6

@mob, no, questo è un lavoro per la barra spaziatrice. – cjm