Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

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
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.