代码之家  ›  专栏  ›  技术社区  ›  Eugene Yarmash

perl的#行指令的目的是什么?

  •  13
  • Eugene Yarmash  · 技术社区  · 15 年前

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

    4 回复  |  直到 15 年前
        1
  •  16
  •   msw    15 年前

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

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

    # line 812 "foo.py"
    

    因此,错误消息将引用对程序员更有意义的原始Python代码。

        2
  •  7
  •   Michael Carman    15 年前

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

        3
  •  6
  •   Felix    12 年前

    我见过好几次人们错误地写 现在的 在#line指令中输入行的编号。它应该包含

    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.
    

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

        4
  •  1
  •   Ven'Tatsu    15 年前

    perl -P 选项,在Perl文件执行之前通过C预处理器运行该文件。因为大多数C预处理器在包含或删除文件的一部分时都会使用行指令,所以任何错误都会从原始源中的位置报告,而不是从处理过的源中报告。

    如果在字符串中生成代码,然后将其传递给 eval

        5
  •  1
  •   mpersico    4 年前

    执行此操作时,#line指令也非常有用 perl -e

    perl -e '#line X
    more perl code here...
    '
    

    其中X是当前shell脚本行+1,因此任何Perl错误都会告诉我