2010-11-01 78 views
3

我想在Perl腳本中獲取當前的文件名和行號。我該怎麼做呢?如何在Perl中獲取文件名和行號?

例如,在一個文件調用test.pl

my $foo = 'bar'; 
print 'Hello World'; 
print functionForFilename() . ':' . functionForLineNo(); 

將輸出:

Hello World 
test.pl:3 

回答

12

這些都可以與__LINE____FILE__令牌 「特殊字面」 中的記載中perldoc perldata

特殊l迭代__FILE__,__LINE__和__PACKAGE__表示程序中當前的文件名,行號和程序包名稱。它們只能用作單獨的標記;它們不會插入到字符串中。如果沒有當前包(由於包是空的;指令),__PACKAGE__是未定義的值。

+0

只要它們沒有被刪除。 – tchrist 2010-11-01 18:05:50

+0

@tchrist:是的,源代碼過濾把很多東西搞砸了:) – Ether 2010-11-01 18:16:55

+1

不只是那些。你也可以修改'__FILE__'和'__LINE__'這兩個值給你使用'#line'指令,然後有幾個perl錯誤會導致'__LINE__'在各種情況下稍微關閉。 – rafl 2010-11-01 18:19:13

6

您可以使用:

print __FILE__. " " . __LINE__; 
7

caller功能會做你在找什麼:

sub print_info { 
    my ($package, $filename, $line) = caller; 
    ... 
} 

print_info(); # prints info about this line 

這將得到其中子被稱爲信息,這可能是你在找什麼。 __FILE____LINE__指令僅適用於它們的寫入位置,因此不能將其效果封裝在子例程中。 (除非你想要一個只打印關於它定義的地方的信息)

相關問題