我想在Perl腳本中獲取當前的文件名和行號。我該怎麼做呢?如何在Perl中獲取文件名和行號?
例如,在一個文件調用test.pl
:
my $foo = 'bar';
print 'Hello World';
print functionForFilename() . ':' . functionForLineNo();
將輸出:
Hello World
test.pl:3
我想在Perl腳本中獲取當前的文件名和行號。我該怎麼做呢?如何在Perl中獲取文件名和行號?
例如,在一個文件調用test.pl
:
my $foo = 'bar';
print 'Hello World';
print functionForFilename() . ':' . functionForLineNo();
將輸出:
Hello World
test.pl:3
這些都可以與__LINE__
和__FILE__
令牌 「特殊字面」 中的記載中perldoc perldata :
特殊l迭代__FILE__,__LINE__和__PACKAGE__表示程序中當前的文件名,行號和程序包名稱。它們只能用作單獨的標記;它們不會插入到字符串中。如果沒有當前包(由於包是空的;指令),__PACKAGE__是未定義的值。
您可以使用:
print __FILE__. " " . __LINE__;
的caller
功能會做你在找什麼:
sub print_info {
my ($package, $filename, $line) = caller;
...
}
print_info(); # prints info about this line
這將得到其中子被稱爲信息,這可能是你在找什麼。 __FILE__
和__LINE__
指令僅適用於它們的寫入位置,因此不能將其效果封裝在子例程中。 (除非你想要一個只打印關於它定義的地方的信息)
只要它們沒有被刪除。 – tchrist 2010-11-01 18:05:50
@tchrist:是的,源代碼過濾把很多東西搞砸了:) – Ether 2010-11-01 18:16:55
不只是那些。你也可以修改'__FILE__'和'__LINE__'這兩個值給你使用'#line'指令,然後有幾個perl錯誤會導致'__LINE__'在各種情況下稍微關閉。 – rafl 2010-11-01 18:19:13