I would like to get the current filename and line number within a Perl script. How do I do this?
For example, in a file call test.pl
:
my $foo = 'bar';
print 'Hello, World!';
print functionForFilename() . ':' . functionForLineNo();
It would output:
Hello, World!
test.pl:3
These are available with the __LINE__
and __FILE__
tokens, as documented in perldoc perldata under "Special Literals":
The special literals __FILE__, __LINE__, and __PACKAGE__ represent the current filename, line number, and package name at that point in your program. They may be used only as separate tokens; they will not be interpolated into strings. If there is no current package (due to an empty package; directive), __PACKAGE__ is the undefined value.
The caller
function will do what you are looking for:
sub print_info {
my ($package, $filename, $line) = caller;
...
}
print_info(); # prints info about this line
This will get the information from where the sub is called, which is probably what you are looking for. The __FILE__
and __LINE__
directives only apply to where they are written, so you can not encapsulate their effect in a subroutine. (unless you wanted a sub that only prints info about where it is defined)
You can use:
print __FILE__. " " . __LINE__;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With