Line directives(#line)用於重新配置perl對當前文件名和行號的想法。何時需要獲取正確的文件名和行號(在錯誤消息中)?perl的#line指令的目的是什麼?
12
A
回答
16
通常會將這些標記放入已經過預處理或機械生成的代碼中,以便回溯到人爲生成的來源。
例如,如果有一個程序,轉換Python來Perl中,它可能會插入一個
# line 812 "foo.py"
,這樣的錯誤信息會指向原始Python代碼這會更有意義程序員。
7
它們在將Perl腳本包裝到另一個文件中時非常有用,就像pl2bat一樣。 Perl在文件的開頭沒有看到批處理命令,它拋出了對行號的想法。 Perl源代碼開頭的#line
指令彌補了這一點。
1
除了已經提到的原因,perl
有一個(強烈建議)-P
選項,該選項在執行前通過C預處理器運行Perl文件。由於大多數C預處理器在包含或刪除文件的一部分時將使用行指令,因此將從它們位於原始源而不是處理源中的位置報告任何錯誤。
如果您在字符串中生成代碼然後傳遞給eval
,則行指令也可能非常有用。通常,如果在此類代碼中出現警告或錯誤,則會報告錯誤,例如「在(eval 1)第1行死亡」。使用行指令可以提供有用的文件名和行號。
6
我已經多次看到人們錯誤地將當前行的編號寫入#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 [email protected] 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
後匹配。
相關問題
- 1. #line - 的目的是什麼?
- 2. Les指令的目的是什麼?
- 3. 以[this]爲目的地的movss指令的目的是什麼?
- 4. Perl中引用的目的是什麼?
- 5. perl中的令牌是什麼?
- 6. 該腳本的Perl命令是什麼?
- 7. 「perl」命令的要點是什麼?
- 8. line-height的用途是什麼,white-space:nowrap是做什麼的?
- 9. 什麼是perl的
- 10. 系統調用指令的目的是什麼?
- 11. 「width:whatever-left-in-the-line;」的CSS是什麼?
- 12. 什麼是用於ABAP的WITH HEADER LINE?
- 13. line-seq的行爲是什麼?
- 14. #line是什麼意思?
- 15. 使用指針的目的是什麼?
- 16. cmpq指令是做什麼的?
- 17. AngularJS:這個指令是幹什麼的?
- 18. Apache配置中的指令是什麼?
- 19. 「ko.validation.rules.pattern.message」指令的作用是什麼?
- 20. Angular2中指令的替換是什麼?
- 21. 什麼是bnez MIPS指令的編碼?
- 22. GCC中的'__IO'指令是什麼?
- 23. 什麼是插入和VUE的指令
- 24. 什麼是屬性指令的例子
- 25. 什麼是PLC中的差分指令?
- 26. 指令的解碼形式是什麼?
- 27. {$ C PRELOAD}指令的含義是什麼?
- 28. 什麼是@Decorator指令的替代?
- 29. 使用指令是幹什麼的?
- 30. 什麼是Laravel的刀片指令?
+1。從來不知道這個功能的存在。 – friedo 2010-03-10 16:44:12