Line directives (# line )用于重新配置perl的当前文件名和行号。什么时候需要这样才能获得正确的文件名和行号(在错误消息中)?
发布于 2010-03-11 00:32:58
通常,这样的标记被放入经过预处理或机械生成的代码中,以便引用人类生成的源代码。
例如,如果有一个程序将Python转换为Perl,它可能会插入一个
# line 812 "foo.py"因此,错误消息将指向原始Python代码,这对程序员来说更有意义。
发布于 2010-03-11 00:32:17
它们在将Perl脚本包装在另一个文件中时非常有用,就像pl2bat一样。Perl在文件的开头看不到批处理命令,这就抛弃了它的行号概念。Perl源代码开头的#line指令弥补了这一点。
发布于 2012-04-21 19:22:08
我见过几次人们错误地将当前行号写到#line指令中。它应该包含下一行的数字。linetest.pl的示例代码(使用ksh包装器为perl脚本设置环境变量):
1 #!/usr/bin/ksh
2 MY_ENV_VAR='something'
3 export MY_ENV_VAR
4 /usr/bin/perl -x $0 $@ 2>&1
5 exit $?
6
7 #!/usr/bin/perl
8 #line 9
9 print "MY_ENV_VAR is $ENV{MY_ENV_VAR}\n";
10 die "This is line 10.";运行脚本并检查结果:
$ ./linetest.pl
MY_ENV_VAR is something
This is line 10. at ./linetest.pl line 10.在第8行写入#line 9后,您可以看到行号匹配。
https://stackoverflow.com/questions/2418498
复制相似问题