urvashi mishra <[EMAIL PROTECTED]> wrote:
:  
: i am trying to take input from multiple files....
: Various I/P files are specified at command line...
:  
: Can anyone tell me how to pass the file name to a
: routine that opens it for parsing ....
:  
: the same function is to be called for all the I/P
: files...

   Okay, what's an I/P file?

  
: Code is:
:  
: foreach my $file (@ARGV)
: {
:  #my $file= shift @ARGV;
:  #print "$file\n";
:  #
:  &pass1($file);

    In modern perl we tend to drop the & in front of
subroutine calls. pass1() is a lousy sub name. Why
not pick something more descriptive?


:  &display();
:  print " \n ****8next******\n";
: } 
: 
:  
: and the function to be called is
:  
: sub pass1
: {
:  my ($file)[EMAIL PROTECTED];
:  print "$file";

    Why is $file in quotes?


:  #MIBFH++;
:  open(MIBFH,$file)|| die "Error opening the  $file
: $!\n";

    If you leave the "\n" off the end you'll get more
complete error messages.


:  while(my $line = <MIBFH> ) 
:  {
: ....
: }
: close(MIBFH);
:  
: }
:  
: Can anyone help me...!

    What is the problem you are having? This seems to
work fine for me. Here's my test code. ($0 is the
file and path to the current script.)

use strict;
use warnings;

foreach my $file ( $0, $0 ) {
    pass1( $file );
    # display();
}

sub pass1 {
    my( $file ) = @_;
    print $file;
    open FH, $file or die qq|Error opening the "$file": $!|;
    while ( my $line = <FH> ) {
        print $line;
        last;
    }
    close FH;
}

__END__


    We might localize the file handle to the subroutine so we
don't clobber any open handles:

sub pass1 {
    my( $file ) = @_;
    print $file;
    local *FH;
    open FH, $file or die qq|Error opening the "$file": $!|;
    while ( my $line = <FH> ) {
        print $line;
        last;
    }
    close FH;
}


    In recent versions of perl we could use a lexical variable:

sub pass1 {
    my( $file ) = @_;
    print $file;
    open my $fh, $file or die qq|Error opening the "$file": $!|;
    while ( my $line = <$fh> ) {
        print $line;
        last;
    }
    close $fh;
}


HTH,

Charles K. Clarkson
-- 
Mobile Homes Specialist
254 968-8328



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to