以下代码段的作用是什么?
if ($str =~ /^:(\w+)/) {
$hash{$1} = 1;
}
它使用第一次成功捕获作为哈希中的键。 $str
必须包含一个或多个字词,但我不确定^:
的含义
答案 0 :(得分:6)
^ start at beginning of string
: match a literal colon
( capture the following string
\w+ matching one or more alphanumeric characters
) end capture
捕获存储在$1
中,然后成为下面哈希%hash
中的一个键。
因此,如果您有字符串:foo
,则会匹配foo
,并获得$hash{foo} = 1
。毫无疑问,此代码的目的是提取某些字符串并使用哈希值对其进行重复数据删除。
答案 1 :(得分:0)
^:
在行的开头表示“:”符号。此外,它仅会在:
答案 2 :(得分:0)
这意味着^
在第一行:
e.g:
$string = q~:Thats~;
$hash{Thats} = 1;
$string2 = q~Thats~;
if
语句在$string
处成功,但在$string2
处失败,因为它不以:
开头。
答案 3 :(得分:0)
你说:
'And the $str has to contain one or more words ...'
我不确定这只是一个错字,还是你的意图与你的小例子不同。现在(根据你的帖子),你的正则表达式会匹配一个字符串,如::Hello
。在Perl中,这可以像
my %hash = ();
my $str = ':Hello';
$hash{ $1 }++ if $str =~ /^:(\w+)/;
现在,如果您将正则表达式中的^:
更改为[:^]
,则表示:您的字符串中的单词前面应加上'字符串的开头'{ {1}}或冒号^
,您的正则表达式现在可以匹配如下行::
(也许这是真正的意图)。
然后可以在while循环中解析这样的字符串:
'Hello:World:Perl:Script';
如果您打印捕获的密钥:$hash{ $1 }++ while $str =~ /[:^](\w+)/g;
结果将是:print "@{[keys %hash]}";
(键的顺序未定义)。
这些类型的字符串在unix世界中很普遍,例如环境变量Perl Script Hello World
,PATH
以及文件LD_LIBRARY_PATH
都是这样的。