On Mon, 7 Mar 2005 13:45:05 +0200, Peter Pentchev <[EMAIL PROTECTED]> wrote:
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-не втори път с тая чавка отпред? :)
Поздрави, Петър
Снощи когато писах писмото наистина не бях много на себе си и после се сетих, че RegExp е една от силните страни на perl. Наистина си го написах вътре. И няма проблем. Причината, заради която бих използвал СЕД е гарбидж колектора, от който съм се понаплашил, а доверявайки се на СЕД, грижите ми отпадат. Отпадат частично, защото метачарс наистина ми накъсаха нервите. В крайна сметка наистина стигнах до това :
open (INFILE,"infile.txt") || die "Would not open IN";
while(<INFILE>){
if($_ =~ m/^$something\|\|.*$/i){
$temp .= "$something||$somethingelse\n"; # || ne e operator
}
else{
$temp .= $_
}
}
close INFILE;
open (OUTFILE,">infile.txt");
print OUTFILE $temp;
close OUTFILE;
undef $temp;
-- www.supportivo.org
I can't stop myself checking for pigs in the outlets. Everybody thinks i'm a punk, cause of the hairstyle(220V).
end
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================
