~
is a bash
-ism rather than a perl
-ism, which is why it’s not working. Given that you seem to be on a UNIX-type system, probably the easiest solution is to use the $HOME
environment variable, such as:
if ( -e $ENV{"HOME"} . "/foo.txt" ) {
print "yes ,it exists!" ;
}
And yes, I know the user can change their $HOME
environment variable but then I would assume they know what they’re doing. If not, they deserve everything they get 🙂
If you want to do it the right way, you can look into File::HomeDir, which is a lot more platform-savvy. You can see it in action in the following script chkfile.pl
:
use File::HomeDir;
$fileSpec = File::HomeDir->my_home . "/foo.txt";
if ( -e $fileSpec ) {
print "Yes, it exists!\n";
} else {
print "No, it doesn't!\n";
}
and transcript:
pax$ touch ~/foo.txt ; perl chkfile.pl Yes, it exists! pax$ rm -rf ~/foo.txt ; perl chkfile.pl No, it doesn't!