我需要验证哈希元素的Perl哈希,例如$Table{$key1}{$key2}存在和定义.这就是我的工作.(我$key1甚至不知道存在)
if
((defined $Table{$key1}) &&
(exists $Table{$key1}) &&
(defined $Table{$key1}{$key2}) &&
(exists $Table{$key1}{$key2}))
{
#do whatever
}
Run Code Online (Sandbox Code Playgroud)
有更简单,更清洁的方法吗?
我发现Haskell和Perl6最有趣的特性之一是能够推迟计算值,直到实际需要它们为止.
另一方面,Perl5喜欢立即做所有事情,但据我所知,它包含了懒惰评估的所有必要原语.那些是:
@_的子程序创建一个别名在其参数列表中的标识符数组引用,即使其中的一些标识符不包含值呢.\@_内部保存的子例程返回重载/绑定对象,然后在需要时取消引用它.(并且有各种CPAN模块可以抽象出领带/过载细节)我一直在Perl中尝试各种惰性编程技术(我在工作中有一个模块,在Perl5中实现了一些Haskell Prelude(像共同递归:$_ = list 0, 1, zipWith {&sum} $_, tail $_ for my $fibs;定义Fibonacci序列已经在工作)).但我感觉代码中隐藏着一些微妙的错误,这些错误可能在函数用于较大的表达式/程序时显现出来.
所以我想知道是否有任何好的例子(CPAN /博客/书籍),任何人都知道,在Perl5中使用Haskell/Perl6就像懒惰一样?特别是,我想阅读使用这种类型的懒惰的任何重要大小的代码.
我也有兴趣知道是否有任何人遇到任何关于在Perl 5中实现延迟评估的问题或难以处理的问题.
我以前编写过任意数量的perl模块,以及多个独立的perl程序,但我以前从未发布过多文件perl程序.
我有一个几乎处于测试阶段的perl程序,并将在开源时发布.它需要大量的数据文件,以及一些外部perl模块 - 我自己写的一些,以及CPAN的一些 - 我必须捆绑它以确保有人可以只下载我的程序并安装它而不用担心寻找模糊的模块.
因此,我觉得我需要编写一个安装程序将所有文件复制到标准位置,以便用户可以轻松安装所有内容.麻烦的是,我不知道标准做法是什么.我发现了许多关于perl模块标准的教程,但没有关于perl程序标准的教程.
对于perl程序,有没有人对标准路径,安装过程等有任何指示?程序是多平台的,这将变得复杂.我一直在Linux上测试它,但它的设计在Windows中也能很好地工作.
最近的一个问题使用了sigil不变语法%hash->{key} = 1;进行散列访问,这似乎工作正常,但我认为这将是一个语法错误.
它似乎也适用于数组:
my @array;
@array->[3] = 6;
Run Code Online (Sandbox Code Playgroud)
这种行为是否记录在某处?我不记得读它,但可能忽略了它.
它似乎表现得如下:
(\%hash)->{key}
Run Code Online (Sandbox Code Playgroud)
而不是我会假设的:
(scalar %hash)->{key} # runtime error
Run Code Online (Sandbox Code Playgroud) 我希望有一个子例程作为哈希的成员,该哈希能够访问其他哈希成员.
例如
sub setup {
%a = (
txt => "hello world",
print_hello => sub {
print ${txt};
})
return %a
}
my %obj = setup();
$obj{print_hello};
Run Code Online (Sandbox Code Playgroud)
理想情况下,这将输出"你好世界"
编辑
对不起,我没有指定一个要求
我应该可以做到
$obj{txt} = "goodbye";
Run Code Online (Sandbox Code Playgroud)
然后输出$ obj {print_hello} goodbye
大家好,我从酵母菌落板的图像中得到一些强度值.我需要能够从强度值中找到峰值.下面是一个示例图像,显示绘制时值的外观.
一些值的示例
5.7 5.3 8.2 16.5 34.2 58.8 **75.4** 75 65.9 62.6 58.6 66.4 71.4 53.5 40.5 26.8 14.2 8.6 5.9 7.7 14.9 30.5 49.9 69.1 **75.3** 69.8 58.8 57.2 56.3 67.1 69 45.1 27.6 13.4 8 5
这些值在75.4和75.3处显示两个峰值,您可以看到值增加然后减少.变化并不总是一样的.
强度值图
http://lh4.ggpht.com/_aEDyS6ECO8s/THKTLgDPhaI/AAAAAAAAAio/HQW7Ut-HBhA/s400/peaks.png来自研究我正在考虑做的事情之一是存储每个组,即哈希值中的山,然后查找组中的最大值.如果我看到的问题是如何确定每个组的边界.
这是我到目前为止的代码的链接:http: //paste-it.net/public/y485822/
以下是完整数据集的链接:http: //paste-it.net/public/ub121b4/
我在Perl中编写代码.任何帮助将不胜感激.谢谢
我有一个字符串1/temperatoA,2/CelcieusB!23/33/44,55/66/77,我想提取单词temperatoA和CelcieusB.
我有这个正则表达式,(\d+/(\w+),?)*!但我只得到了匹配1/temperatoA,2/CelcieusB!
为什么?
在English模块和其他一些地方,建议用户永远不要使用$& $`和$'变量或它们的English等价物,$MATCH $PREMATCH $POSTMATCH因为它们会减慢所有正则表达式的使用.
什么是显示性能问题的良好测试用例(基准测试)?
什么是更快:使用函数编写PHP代码或将其编写为纯脚本?所以,正如我所看到的,Apache或任何其他服务器将使用PHP脚本使用函数创建纯脚本...我的意思是我们有:
function foo($a, $b){ return ($a + $b); }
echo foo(4, 5);
Run Code Online (Sandbox Code Playgroud)
和PHP会把它变成这样的东西:
echo 9;
Run Code Online (Sandbox Code Playgroud)
或者会吗?