Thanks for your help and for the detailed info :)
(Needless to say it works fine when i changed it to
while (<>) )

"Sudarshan Raghavan" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Babylon wrote:
>
> >I know how it's supposed to be done but when i tried it in a program i'm
> >writing at the moment it isn't working quite how i expected.
> >
> >The program is, in it's simplest form (which still doesn't work):
> >------------------------------------------------------
> >#!perl
> >
> >for $file (<s2/*>)
> >{
> > push @ARGV, $file;
> >}
> >
>
> Read through this document to find out how the null filehandle (<>) works
> perldoc perlop #Search for 'null filehandle'
> This will give you info on the -i switch ($^I is a mnemonic for the -i
> switch)
> perldoc perlrun
>
> >
> >$^I = "~";
> >for (<>)
> >
>
> Short answer:
> change the above line to while (<>) and things will work fine.
>
> Long answer:
> The -i switch or the value of $^I apply only when the <> construct is
> currently processing. The for (<>) is equivalent to slurping in the
> contents of all the files present in the @ARGV array (perldoc perlsyn).
> The for construct creates a flat list before actually executing the loop
> body. <> processing has already finished when the loop body is being
> executed.
>
> Why is the original file empty?
> When the <> construct is processing and the $^I has been set, the
> filehandle to the currently open file is selected (perldoc -f select,
> one argument form of select). All print statements without a filehandle
> argument will be directed at this filehandle (perldoc -f print). As a
> result of no print statements being made when <> was processing, the
> original file ends up being empty.
>
> Why does the output appear on the standard output?
> This is the result of modifying and printing the contents of the list
> created by the for construct. Note: The default selected filehandle is
> STDOUT.
>
> The while loop on the other hand steps through the contents one line at
> a time (the default behaviour). This means that the loop body is being
> executed when the <> construct is still processing.
>
>
>
>
> >{
> >
> > s/(<td .*?>)/<td>/g;
> > print;
> >}
> >------------------------------------------------------
> >
> >The problem is that the print statement sends everything to the command
> >console output, not the file i'm try to edit in-place. The original file
> >name ends up being completely blank after running the script, but at
least
> >the backup is created.
> >
> >I'm using perl 5.8, and WindowsXP.
> >
> >
> >Also, yes, that is a search for html tags but it's to do some massive
batch
> >conversion on a website i made a few years back so i know what i'm
working
> >with and that it will work all work correctly.
> >
> >The script isn't really the full story... It's just what i'm doing in the
> >most basic form, that still doesn't work ;)
> >
> >So, can anyone work out what's wrong? Have i done something wrong in my
> >script?
> >
> >
> >
> >
> >
>



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to