2011-09-20 15 views

Odpowiedz

8

Znaczenie słowa barera jest różne. Przez większość czasu bareword jest wywołaniem funkcji.

sub foo { say "Hello"; } 
foo; 

Czasami jest to literał ciąg.

$x{foo} # $x{"foo"} 

W jeszcze innych okolicznościach produkuje typeglob.

print STDOUT "foo"; # print { *STDOUT } "foo"; 

W tym przypadku

open3(HIS_IN, HIS_OUT, HIS_ERR, ...) 

jest równoważna

open3("HIS_IN", "HIS_OUT", "HIS_ERR", ...) 

ale open3 wykorzystuje ten ciąg jako nazwa glob w pakiecie rozmówcy, więc powyższe jest funkcjonalnie równoważny to

open3(*HIS_IN, *IS_OUT, *HIS_ERR, ...) 
+0

Czy ma to również miejsce w przypadku otwarcia, zamknięcia itp.? –

+1

@new_perl, Z powodu specjalnych reguł parsowania, 'open' i' close' powodują, że argument interpretowany jest jako glob (bezpośrednio), a nie jako ciąg, który jest następnie używany do pobierania globu. Dlatego 'open (FOO, ...)' działa w 'use strict;' i 'open3 (FOO, ...)' nie. – ikegami

+0

Ale 'open (* FOO)' jest również ważny, prawda? –

Powiązane problemy