in reply to Read file contents

print $file and $path before opening the file to check that perl is trying to open what you think it's trying to open.

Make sure to check the open succeeded using

open FH, "<", "$path/$file" or die "can't open $path/$file: $!";

It's generally accepted that lexical filehandles are better than barewords:

open my $FH, "<", "$path/$file" or die "can't open $path/$file: $!";


Unless I state otherwise, all my code runs with strict and warnings

Replies are listed 'Best First'.
Re^2: Read file contents
by Anonymous Monk on Jun 29, 2008 at 16:44 UTC
    Allright. I have a file called tax.txt on C:\Users\rak\Desktop\tax.txt this is the code: #!/usr/local/bin/perl use strict; use File::Path; use File::Basename; print"enter the path\n"; my $ans=<STDIN>;#$ans=C:\Users\rak\Desktop\tax.txt chomp($ans); my $path= dirname($ans);#I dont have to use this I know.I am just checking here. my $file= basename($ans);#I dont have to use this I know. $ans=~ s/\\/\//gi;#All my file open statements worked well #with c:/bla/bla instead of c:\bla\bla; print $ans; #to make sure that I am replacing all "\" with "/"; open(FH,"<$ans") or die $!; @lines=<FH>; print "\n@lines-bla\n";#bla is to check the print statement:Just prints bla there,not printing file contents; Here is the output: enter the path C:\Users\rak\Desktop\tax.txt No such file or directory at C:\Users\rak\Desktop\cool.pl line 18, <STDIN> line 1. Where i am going wrong? tried without replacing \ with/ same error. I HAVE tax.txt EXISTING ON MY DESKTOP.
      When I try to run your code, I get the error message:
      Global symbol "@lines" requires explicit package name...
      What happens if you fix that problem?

      Sorry, but your example is not clear. If you substitute all the "\" with "/" and then you print $ans, why I can't see any "/" in your output?

      Update: hilitai is right: that can't be the output of the script you posted, for it doesn't compile. I tried it adding "my" before @lines and it works AFAICT.

      sini@ordinalfabetix:~$ ./x.pl enter the path \home\sini\x.pl /home/sini/x.pl #!/usr/bin/perl # use strict; use File::Path; use File::Basename; print"enter the path\n"; my $ans=<STDIN>; #$ans=C:\Users\rak\Desktop\tax.txt chomp($ans); my $path= dirname($ans);#I dont have to use this I know.I am just che +cking here. my $file= basename($ans);#I dont have to use this I know. $ans=~ s/\\/\//gi;#All my file open statements worked well #with c:/b +la/bla instead of c:\bla\bla; print $ans; #to make sure that I am replacing all "\" with "/"; open(FH,"<$ans") or die $!; my @lines=<FH>; print "\n@lines-bla\n";#bla is to check the print statement:Just prin +ts bla there,not printing file contents; -bla sini@ordinalfabetix:~$

      Rule One: "Do not act incautiously when confronting a little bald wrinkly smiling man."