Re: lug-bg: Perl system() or exec()
- Subject: Re: lug-bg: Perl system() or exec()
- From: Sertys <sertys@xxxxxxxxxxxxxx>
- Date: Mon, 07 Mar 2005 22:19:04 +0200
- Organization: Supportivo INC
On Mon, 7 Mar 2005 13:45:05 +0200, Peter Pentchev <roam@xxxxxxxxxxx> 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
============================================================================
|