首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >perl的#line指令的用途是什么?

perl的#line指令的用途是什么?
EN

Stack Overflow用户
提问于 2010-03-11 00:16:11
回答 5查看 1.8K关注 0票数 13

Line directives (# line )用于重新配置perl的当前文件名和行号。什么时候需要这样才能获得正确的文件名和行号(在错误消息中)?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-11 00:32:58

通常,这样的标记被放入经过预处理或机械生成的代码中,以便引用人类生成的源代码。

例如,如果有一个程序将Python转换为Perl,它可能会插入一个

代码语言:javascript
运行
复制
# line 812 "foo.py"

因此,错误消息将指向原始Python代码,这对程序员来说更有意义。

票数 16
EN

Stack Overflow用户

发布于 2010-03-11 00:32:17

它们在将Perl脚本包装在另一个文件中时非常有用,就像pl2bat一样。Perl在文件的开头看不到批处理命令,这就抛弃了它的行号概念。Perl源代码开头的#line指令弥补了这一点。

票数 7
EN

Stack Overflow用户

发布于 2012-04-21 19:22:08

我见过几次人们错误地将当前行号写到#line指令中。它应该包含下一行的数字。linetest.pl的示例代码(使用ksh包装器为perl脚本设置环境变量):

代码语言:javascript
运行
复制
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.";

运行脚本并检查结果:

代码语言:javascript
运行
复制
$ ./linetest.pl
MY_ENV_VAR is something
This is line 10. at ./linetest.pl line 10.

在第8行写入#line 9后,您可以看到行号匹配。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2418498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档