Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^2: Multiple file input into a perl script

by kelder (Novice)
on Sep 30, 2008 at 19:01 UTC ( [id://714612]=note: print w/replies, xml ) Need Help??


in reply to Re: Multiple file input into a perl script
in thread Multiple file input into a perl script

I thought about using the glob function, since all of my files are in the same directory, but because I'm new to perl I might be misuing the format: My Code:
@files=<ABi1*>; foreach $file (@files) { while(<>) { Do my function; } if (eof($file)) { Do my end of file cleanup } }
Does the way I set this up work, or am I completely screwing up the way you are supposed to use this function?

Replies are listed 'Best First'.
Re^3: Multiple file input into a perl script
by Corion (Patriarch) on Sep 30, 2008 at 19:47 UTC

    The magic diamond-operator <> only works if you stuff the filenames into @ARGV. But you surely have tried that yourself and merely forgot to tell me that you found your code didn't work the way you wrote it.

    I recommend you read up on open to learn how to open and read a single file and process that, and then proceed to do that in the loop:

    use strict; use File::DosGlob qw(bsd_glob); my @files = glob 'ABi1*'; foreach my $file (@files) { open my $fh, '<', $file or die "Couldn't read '$file': $!"; while (<$fh>) { ... do your function }; # EOF, do end of file cleanup };
      The magic diamond-operator <> only works if you stuff the filenames into @ARGV.
      My reading of I/O Operators has me believing that using the diamond operator for globbing works as the OP seems to expect. Here's what I get with a simple test:
      -> ls file1.txt file2.txt file3.txt -> perl -le '@files = <file*>; print @files;' file1.txt file2.txt file3.txt
      I may have missed something, but it looks to me that kelder's expectation of how globbing works with <> is right. Is there a platform difference to worry about? (OP is on a Mac, above test runs the same on a Mac and under NetBSD.)
        That part works. The empty diamond, used to read the contents of all files (or STDIN) is what doesn't work without setting up @ARGV. That dual use is why I prefer an explicit glob() over the diamond...

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://714612]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2024-03-28 08:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found