n0p*_*0pe 4 string perl parsing colon
我用Perl字符串解析偶然发现了一些奇怪的东西.这是一个例子:
$word = "hello";
$test1 = "colon:values::$word:test";
$test2 = "colon:values::$word::test";
// test1 prints: "colon:values::hello:test"
// test2 prints: "colon:values::"
Run Code Online (Sandbox Code Playgroud)
因此,如果Perl在字符串中的变量之后看到双冒号,它(我假设)会认为您正在尝试使用包名称.我猜它正在尝试加载"Hello :: test"而没有找到任何东西 - 因此提前终止字符串.
这是正常的吗?我觉得这很反直觉.我能够通过逃避第一个冒号来解决它:
$works = "colon:values::$word\::test";
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我完全错过了一些明显的东西?
虽然这有效,但处理案例的更广泛的方法是使用大括号消除变量的名称:
perl -E "my $word = 'red'; say qq|colon::values::${word}::test|"
colon::values::red::test
Run Code Online (Sandbox Code Playgroud)
这在perldata中有记录:
与在某些shell中一样,您可以将变量名称括在大括号中,以便将其与下面的字母数字(和下划线)消除歧义.在将变量插入字符串以将变量名称与后面的双冒号或撇号分隔时,您还必须执行此操作,因为这些将被视为包分隔符:
Run Code Online (Sandbox Code Playgroud)$who = "Larry"; print PASSWD "${who}::0:0:Superuser:/:/bin/perl\n"; print "We use ${who}speak when ${who}'s here.\n";没有大括号,Perl会寻找a
$whospeak,a$who::0和$who's变量.最后两个是(推测)不存在的包中$0的$s变量和变量who.
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |