At 18:48 +0200 2002.04.08, Louis Pouzin wrote: >I want to read several text files into a single string. > >use strict; >@ARGV=('fil1','fil2','fil3'); >my $fil = do{local $/; <>}; >print $fil; >__END__ > >This prints only the contents of fil1.
You would have to loop over it, and at that point, may not want to use the implicit <>. I'd just be more explicit: use strict; @ARGV=('fil1','fil2','fil3'); my $fil = join '', <>; print $fil; __END__ Or, perhaps a bit faster, as you let Perl give you one string per file instead of joining many strings per file: use strict; @ARGV=('fil1','fil2','fil3'); my $fil; { local $/; $fil = join '', <>; } print $fil; __END__ >If I use an array: > >use strict; >@ARGV=('fil1','fil2','fil3'); >my @fil = do{local $/; <>}; >print @fil; >__END__ > >All 3 files are printed, but there are 3 strings in @fil. Yep. That do{} block returns three strings in either context, with $fil or @fil, one string for each file. At 09:56 -0700 2002.04.08, Andrew O. Mellinger wrote: >You have made a local of $/, >but haven't changed the value. You probably want to undef it. No, local() creates a new value; if you don't provide one, then it defaults to undef (or an empty list, in the case of an array or hash). So "local($/)" does undef $/ until the current block exits (or a new value is given to it). -- Chris Nandor [EMAIL PROTECTED] http://pudge.net/ Open Source Development Network [EMAIL PROTECTED] http://osdn.com/