2013-05-17 13 views
8

Wygląda na to, że perl traktuje {+0,0} jako BLOK i {0,0} a WYRAŻA Ale dlaczego? Czy to przepis specjalny?w perlu (v5.14.2), dlaczego mapa {+0,0}() jest poprawna, ale mapa {0,0}() nie?

Jeśli chcę się upewnić, że {} jest anonimowym hash, niezależnie od nawiasów, czy muszę wstawić `+ 'przed {}?

dzięki.

+2

'{; ...} 'jest bardziej idiomatyczne (i lepsza wskazówka dla czytelnika) dla wymuszania parsowania jako BLOKU. '+' jest zwykle używane dla przeciwieństwa ('+ {...}' do wymuszenia analizowania jako WYRAŻ). – ikegami

Odpowiedz

3

Dlaczego? Ponieważ może to być jedna z nich, a analizator składni nie patrzy wystarczająco daleko, aby wiedzieć na pewno, zanim nadejdzie czas na podjęcie decyzji.

Czy musisz wstawić znak "+" przed {}, aby był traktowany jako anonimowy konstruktor skrótu, niezależnie od zawartości {}? Tak.

+3

Jest jednak interesujące, że 'perl -MO = Deparse -e" map {+0,0} 1..2 "' wypisuje coś, czego nie można użyć w oryginalnym skrypcie. –

Powiązane problemy