Command-Line

為什麼我不能在命令行的@ARGV 中傳遞正則表達式?

  • February 12, 2019

為什麼我不能用if($l =~ $ARGV[0]),但我可以用if($l =~ /$ARGV[0]/g

第一種情況

$ perl script.pl '/^[\w]/g'

第二種情況

$ perl script.pl '^[\w]'

字元串和正則表達式在 perl 中是不同的原始類型,所有放在@ARGV數組中的變數都是核心在啟動時給程序的簡單字元串;$ARGV[0]是標量字元串,而不是正則表達式。

當你這樣做時,if($l =~ $ARGV[0])這相當於代替。在前一種情況下,斜杠只是字元串中的字元,而在後一種情況下,它們是分隔正則表達式的 Perl 語法的一部分。$ARGV[0]``'/^[\w]/g'``if($l =~ '/^[\w]/g')``if($l =~ /^[\w]/g)

引用自:https://unix.stackexchange.com/questions/249105