行指令(#line)用于重新配置perl对当前文件名和行号的概念.何时需要获取正确的文件名和行号(在错误消息中)?
msw*_*msw 16
通常将这些标记放入已经预处理或机械生成的代码中,以便返回到人类生成的源.
例如,如果有一个程序将Python转换为Perl,它可能会插入一个
# line 812 "foo.py"
Run Code Online (Sandbox Code Playgroud)
所以错误消息会引用原始的Python代码,这对程序员来说更有意义.
将Perl脚本包装在另一个文件中时它们很有用,比如pl2bat.Perl没有在文件开头看到批处理命令,这会抛出其行号的概念.一个#line在Perl的源代码开始指令补偿这一点.
我已经多次看到人们错误地将当前行的编号写入#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.";
Run Code Online (Sandbox Code Playgroud)
运行脚本并检查结果:
$ ./linetest.pl
MY_ENV_VAR is something
This is line 10. at ./linetest.pl line 10.
Run Code Online (Sandbox Code Playgroud)
#line 9在第8行写完后,您可以看到行号匹配.
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |