Thursday, May 13, 2010

Perl: вопрос на засыпку

Почему во втором примере печатается не то же самое, что в первом:

$ echo "1a1a1" | perl -p -e 's/a/n/g'
1
1
1

$ echo "1a1a1" | perl -p -e 's/a/n/ge'
1SCALAR(0x8117150)1SCALAR(0x8117150)1

4 comments:


  1. $ echo "1a1a1" | perl -W -p -e 's/a/n/g'
    Unquoted string "n" may clash with future reserved word at -e line 1.
    1SCALAR(0x20c2b98)1SCALAR(0x20e7cf0)1

    Ссылка на строку 'n'

    ReplyDelete
  2. Ага. Еще один аргумент в пользу use warnings.

    ReplyDelete
  3. А какое поведение ожидалось-то? Всё правильно возвращает -- сылку на 'n'.

    ReplyDelete
  4. Без /e как раз таки REPLACEMENT это строка, а с /e - выражение, поэтому
    % echo "1a1a1" | perl -W -p -e 's/a/n/g'
    1
    1
    1
    % echo "1a1a1" | perl -W -p -e 's/a/n/ge'
    Unquoted string "n" may clash with future reserved word at -e line 1.
    1SCALAR(0x805f840)1SCALAR(0x805f840)1

    ReplyDelete