如果我理解正确,呼召if (exists $ref->{A}->{B}->{$key}) { ... }将会存在$ref->{A},$ref->{A}->{B}即使它们之前不存在if!
这似乎非常不受欢迎.那么我该如何检查是否存在"深度"哈希键?
这段代码是将文件内容读入Perl变量的好方法吗?它有效,但我很好奇我是否应该使用更好的练习.
open INPUT, "input.txt";
undef $/;
$content = <INPUT>;
close INPUT;
$/ = "\n";
Run Code Online (Sandbox Code Playgroud) 只是想知道我是否有两个数组,A和B,如何删除/删除A中也可以在B中找到的那些元素?这样做最有效的方法是什么?
而且,作为一种特殊情况,如果B是grepA 之后的结果数组,该怎么做?当然,在这种情况下,我们可以做一个grep否定的条件.但是在perl中是否有类似于另一个数组的补充?
谢谢.
规范的一部分说"有些名字很特别,例如Hughie,Dewey,Louis和Donald.在项目的整个生命周期中,可以随意添加其他名称.每当你输入其中一个名字时,请玩quack.wav."
我可以写......
while (<>) {
if ($_ =~ /Hughie|Dewey|Louis/) {
quack() ;
}
elsif ($_ =~ /Donald/ {
quack() ;
you_re_fired_apprentice() ; # Easter egg don't tell QA
}
}
Run Code Online (Sandbox Code Playgroud)
...但是虽然要实施,但它看起来是WTF-y:二进制搜索在哪里?如果鸭子名字的数量突然大幅增加怎么办?它根本不会扩展!
我可以在临时目录中使用这些名称创建空文件,然后使用"文件存在"API,但这看起来很迂回,我必须确保它们最后被删除.
当然有更好的方法吗?
我有一个标签限制数据读取
1 0 0 1 1 Black Swan
0 0 1 0 0 Golden Duck
1 0 0 1 0 Brown Eagle
0 0 1 0 1 Golden Duck
1 0 0 1 0 Black Swan
1 0 1 0 0 Golden Duck
1 0 0 1 1 Sparrow
Run Code Online (Sandbox Code Playgroud)
最后一列是由空格分隔的一个或多个单词的组合.我想计算最后一列中唯一值的数量,并将其替换为该组唯一的数字.我知道我可以计算并列出使用的数字
awk -F '\t' '{print $NF}' infile | sort | uniq | wc -l
Run Code Online (Sandbox Code Playgroud)
但是如何用数字替换?例如,将所有黑天鹅替换为1,将所有金鸭替换为2等.我希望结果如下:
1 0 0 1 1 1
0 0 1 0 0 2
1 0 0 1 …Run Code Online (Sandbox Code Playgroud)