En op 24 augustus 2003 sprak Tor Hildrum:
> Well, my final solution, that isn't really a solution was:
> -0ne '@a=/WORD/g;print [EMAIL PROTECTED]'
> 
> Now, this isn't really a solution because it has the WORD
> hardcoded. But, how would I be able to get the WORD
> when using -n? I'm guessing this isn't possible.

If the word is the second parameter on the command line, that is easy.
In the first pass of the -n loop, the first value of @ARGV is shifted
off, but the rest of @ARGV is left intact until the eond of the first
file is reached. So if the word is last on the command line, you can
just use pop inside the -n loop:

    perl -0ne'print s/${\pop}//g' file word

If the word is the first argument, then you have a problem. You have to
remove the word from @ARGV _before_ the first pass of the -n loop, which
means you have to use an INIT block (often too long!):

    perl -0ne'INIT{$a=shift}print s/$a//g' word file

By the way, it's better to use -p here. -p is often shorter than print,
especially if you're already using -n.

    perl -0pe'$_=s/${\pop}//g' file word

Eugene

-- 
Pluralitas non est ponenda sine neccesitate -- \\/illiam of ()ckham

Reply via email to