Потому что, чтобы это корректно распарсить, надо знать все прототипы и функции. Т.е. полностью держать в памяти половину CPAN :) Ведь если функция импортирована из какого-нибудь модуля, то никто не узнает, сожрет она аргумент или не сожрет.
Т.е. это та проблема перла, которая решается только дисциплиной. А именно писать регекспы так, что было понятно, что это регекспа не только компилятору. 2013/12/17 TheAthlete <[email protected]> > Кстати он тоже не может парсить этот код (вывод PPI::Dumper): > > PPI::Document > PPI::Token::Comment '#!/usr/bin/perl\n' > PPI::Token::Whitespace ' \n' > PPI::Statement::Include > PPI::Token::Word 'use' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'strict' > PPI::Token::Structure ';' > PPI::Token::Whitespace '\n' > PPI::Statement::Include > PPI::Token::Word 'use' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'warnings' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'FATAL' > PPI::Token::Whitespace ' ' > PPI::Token::Operator '=>' > PPI::Token::Whitespace ' ' > PPI::Token::Quote::Single ''all'' > PPI::Token::Structure ';' > PPI::Token::Whitespace '\n' > PPI::Statement::Include > PPI::Token::Word 'use' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'feature' > PPI::Token::Whitespace ' ' > PPI::Token::Quote::Single ''say'' > PPI::Token::Structure ';' > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace ' \n' > PPI::Statement::Sub > PPI::Token::Word 'sub' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'with_prototype' > PPI::Token::Whitespace ' ' > PPI::Token::Prototype '()' > PPI::Token::Whitespace ' ' > PPI::Structure::Block { ... } > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace ' ' > PPI::Statement::Break > PPI::Token::Word 'return' > PPI::Token::Whitespace ' ' > PPI::Token::Number '100' > PPI::Token::Structure ';' > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace ' \n' > PPI::Statement::Sub > PPI::Token::Word 'sub' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'without_prototype' > PPI::Token::Whitespace ' ' > PPI::Structure::Block { ... } > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace ' ' > PPI::Statement::Break > PPI::Token::Word 'return' > PPI::Token::Whitespace ' ' > PPI::Token::Number '100' > PPI::Token::Structure ';' > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace ' \n' > PPI::Statement::Compound > PPI::Token::Word 'foreach' > PPI::Token::Whitespace ' ' > PPI::Structure::List ( ... ) > PPI::Statement > PPI::Token::Number '1' > PPI::Token::Whitespace ' ' > PPI::Structure::Block { ... } > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace ' ' > PPI::Statement > PPI::Token::Word 'say' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'with_prototype' > PPI::Token::Whitespace ' ' > PPI::Token::Operator '/' > PPI::Token::Whitespace ' ' > PPI::Token::Number '10' > PPI::Token::Whitespace ' ' > PPI::Token::Structure ';' > PPI::Token::Whitespace ' ' > PPI::Token::Comment '# / ; die "this dies!";' > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace ' ' > PPI::Statement > PPI::Token::Word 'say' > PPI::Token::Whitespace ' ' > PPI::Token::Word 'without_prototype' > PPI::Token::Whitespace ' ' > PPI::Token::Operator '/' > PPI::Token::Whitespace ' ' > PPI::Token::Number '10' > PPI::Token::Whitespace ' ' > PPI::Token::Structure ';' > PPI::Token::Whitespace ' ' > PPI::Token::Comment '# / ; die "this dies!";' > PPI::Token::Whitespace '\n' > PPI::Token::Whitespace '\n' > PPI::Statement::End > PPI::Token::Separator '__END__' > PPI::Token::Whitespace '\n' > PPI::Token::End 'OUTPUT:\n10\n100\nthis dies! at a.pl line 17.\n' > > т.е. он тоже представляет строку как комментарий: > > PPI::Token::Comment '# / ; die "this dies!";' > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- С уважением, Егор Байбара +7-963-675-29-49
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
