tags:

views:

105

answers:

4

I am a newbie to perl. My problem is...

I have a relative path

   $base_path = input/myMock.TGZ

myMock.TGZ is the file name located in input folder. The filename can change. But the path is always stored in $base_path.

I need to check if the file exists in $base_path.

Any suggestions are helpful to me

+2  A: 
if (-e $base_path)
{ 
 # code
}

-e is the 'existence' operator in Perl.

You can check permissions and other attributes using the code on this page.

mdm
Why not link to the official documentation for these operators instead?
Ether
@Ether, just because I was searching for the existence operator and its the first page I found. PerlDoc was probably a better option in retrospect.
mdm
+8  A: 
print "$base_path exists!\n" if -e $base_path;

The perlfunc documentation covers the long list of Perl's file-test operators:

Greg Bacon
hey bacon, nice to see you.so -e even works for a relative path? i thought it only worked for particular file...cool thanks
superstar
@superstar Hello again! Yes, `-e` works with relative paths, but I think I may have misunderstood your question. Do you have a *directory* named `myMock.TGZ`, and you want to know whether that directory contains a file with a particular name? Help us give you better answers by editing your question to include examples!
Greg Bacon
+2  A: 

You can use: if(-e $base_path)

klausbyskov
You might also use `-f` to test for a normal file (as opposed to a directory or various other special types of file)
justintime
+2  A: 

You might want a variant of exists ... perldoc -f "-f"

      -X FILEHANDLE
       -X EXPR
       -X DIRHANDLE
       -X      A file test, where X is one of the letters listed below.  This unary operator takes one argument,
               either a filename, a filehandle, or a dirhandle, and tests the associated file to see if something is
               true about it.  If the argument is omitted, tests $_, except for "-t", which tests STDIN.  Unless
               otherwise documented, it returns 1 for true and '' for false, or the undefined value if the file
               doesn’t exist.  Despite the funny names, precedence is the same as any other named unary operator.
               The operator may be any of:

                   -r  File is readable by effective uid/gid.
                   -w  File is writable by effective uid/gid.
                   -x  File is executable by effective uid/gid.
                   -o  File is owned by effective uid.

                   -R  File is readable by real uid/gid.
                   -W  File is writable by real uid/gid.
                   -X  File is executable by real uid/gid.
                   -O  File is owned by real uid.

                   -e  File exists.
                   -z  File has zero size (is empty).
                   -s  File has nonzero size (returns size in bytes).

                   -f  File is a plain file.
                   -d  File is a directory.
                   -l  File is a symbolic link.
                   -p  File is a named pipe (FIFO), or Filehandle is a pipe.
                   -S  File is a socket.
                   -b  File is a block special file.
                   -c  File is a character special file.
                   -t  Filehandle is opened to a tty.

                   -u  File has setuid bit set.
                   -g  File has setgid bit set.
                   -k  File has sticky bit set.

                   -T  File is an ASCII text file (heuristic guess).
                   -B  File is a "binary" file (opposite of -T).

                   -M  Script start time minus file modification time, in days.
hpavc