I need to find the full path to the Perl script I'm currently running, i.e.
for ~/dir/my.pl I would need it to be "/home/user/dir/my.pl". The
$0
will give me "~/dir/my.pl".for ./my.pl I would still need "/home/user/dir/my.pl"
etc. Thanks!
I need to find the full path to the Perl script I'm currently running, i.e.
for ~/dir/my.pl I would need it to be "/home/user/dir/my.pl". The $0
will give me "~/dir/my.pl".
for ./my.pl I would still need "/home/user/dir/my.pl"
etc. Thanks!
Looks like you just need to expand the paths to their absolute values. Check this article for how to do that.
Use the FindBin module:
$ cat /tmp/foo/bar/baz/quux/prog
#! /usr/bin/perl
use FindBin;
print "$FindBin::Bin/$FindBin::Script\n";
$ PATH=/tmp/foo/bar/baz/quux prog
/tmp/foo/bar/baz/quux/prog
$ cd /tmp/foo/bar/baz/quux
$ ./prog
/tmp/foo/bar/baz/quux/prog
It sounds like you're looking for the rel2abs function in File::Spec. For example:
#!/usr/bin/perl
use File::Spec;
my $location = File::Spec->rel2abs($0);
print "$location\n";
This will resolve $0 in the way you describe:
$ ./myfile.pl
/Users/myname/myfile.pl
$ ~/myfile.pl
/Users/myname/myfile.pl
Alternatively, you could use Cwd::abs_path in the exact same way.