On Mon, Mar 07, 2005 at 01:16:53PM +0200, Sava Chankov wrote:
> Peter Pentchev wrote:
> >On Mon, Mar 07, 2005 at 11:37:17AM +0200, Sava Chankov wrote:
> >>Peter Pentchev wrote:
> >Проблемът не е толкова в генерирането им, колкото в подаването им
> >през шела към... към......
>
> Че какъв е проблема за подаването на аргументи към едноредовия скрипт?
> Вярно, че не става през масива @ARGV, но за тази цел може да се ползва хеша
> %ENV. Примерно:
>
> SOMETHING="life";SOMETHINGELSE="something else";perl -pi
> -e's/$ENV{SOMETHING}/$ENV{SOMETHINGELSE}/og'
>
> >А ако изчисляването на $something и $somethingelse не е нещо
> >тривиално, а има смисъл да бъде направено само веднъж, тогава...
> >
> >perl -pi -e 'BEGIN { $something="blah"; $somethinglese="furrfu"; }
> >s/^$something.*\$/$somethingelse/g'
>
> може би искаш да кажеш
> perl -pi -e '$something="blah"; $somethinglese="furrfu";
> s/^$something.*\$/$somethingelse/og'
>
> /o - compile the regexp only onceНе, искам да кажа именно с BEGIN, защото дори и да таковаме израза само веднъж, все пак самото *изчисляване* на $something и $somethingelse преди това може да е по-сложно и/или да има странични ефекти. Затова искам да го сложа в BEGIN, да не мъчим виртуалната машина да ги смята на всеки ред :) Макар че и ти си прав - и ти си много прав - най-добрият вариант в случая май е комбинация от двете: изчисляване на променливите в BEGIN блок и след това използването им в s///o. А между другото, точно в този случай от /g няма никакъв смисъл - къде ще match-не втори път с тая чавка отпред? :) Поздрави, Петър -- Peter Pentchev [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553 "yields falsehood, when appended to its quotation." yields falsehood, when appended to its quotation.
pgp0lAypveNxx.pgp
Description: PGP signature
