Как я могу получить имя файла и номер строки в Perl? - PullRequest
6 голосов
/ 01 ноября 2010

Я хотел бы получить текущее имя файла и номер строки в скрипте Perl.Как мне это сделать?

Например, при вызове файла test.pl:

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

Будет выведено:

Hello World
test.pl:3

Ответы [ 3 ]

13 голосов
/ 01 ноября 2010

Они доступны с токенами __LINE__ и __FILE__, как описано в perldoc perldata в разделе «Специальные литералы»:

Специальные литералы __FILE__, __LINE__ и __PACKAGE__ представляют текущее имя файла, номер строки и имя пакета в этой точке вашей программы. Они могут использоваться только как отдельные токены; они не будут интерполированы в строки. Если текущего пакета нет (из-за пустого пакета; директива), __PACKAGE__ является неопределенным значением.

8 голосов
/ 01 ноября 2010

Функция caller сделает то, что вы ищете:

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

print_info(); # prints info about this line

Это позволит получить информацию о том, откуда вызывается сабвуфер, что, вероятно, то, что вы ищете.Директивы __FILE__ и __LINE__ применяются только там, где они написаны, поэтому вы не можете инкапсулировать их эффект в подпрограмме.(кроме случаев, когда вам нужен подпрограмма, которая печатает только информацию о том, где она определена)

6 голосов
/ 01 ноября 2010

Вы можете использовать:

print __FILE__. " " . __LINE__;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...