LINUX.ORG.RU
ФорумAdmin

perl one line, array?


0

0

В перловых скриптах в одну строку работают массивы или нет?
у меня почему-то вот такая мини-парсилка не работает(
perl -ne ' BEGIN { @a=split(/(^[a-z]{3}-[a-z]{2,3})/,$str)}; if($a[0]!=$a[1]); END { print "$str\n"; }'
anonymous

perl -ne '@a=split(/(^[a-z]{3}-[a-z]{2,3})/,$str); if($a[0]!=$a[1]) { print "$str\n"; }'

только если в @a будет массив строк, то сравнивать их нужно не оператором != , а оператором ne

anonymous
()

> perl -ne ' BEGIN { @a=split(/(^[a-z]{3}-[a-z]{2,3})/,$str)};

Что есть $str?

> if($a[0]!=$a[1]);

И чё дальше?

> END { print "$str\n"; }'

Походу дела тебе надыть perl подучить. Чтобы хотя бы понимать КОГДА вызывается код из BEGIN и END и как правильно пейсать онлайнеры.

anonymous
()

> split(/(^[a-z]{3}-[a-z]{2,3})/

А это вообще бред. Сплит по регэкспу с якорем '^';

anonymous
()

perl -ne '@a=/^([a-z]{3})-([a-z]{2,3})/;$a[0] ne $a[1] && print' <file>

Может что-то типа того?

P.S. Если я правильно понял исходные, то на awk еще проще:

gawk -F- '$1!=$2' <file>

anonymous
()
Ответ на: комментарий от anonymous

> gawk -F- '$1!=$2' <file>

perl -a -F- -ne 'print if $F[0] ne $F[1]'

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.