我正在使用一些具有子程序的代码,该子程序包含一个数组引用作为参数之一.此传入数组中的元素可以是小数组或字符串.
我想确定每个元素的类型是为了做某些特定的事情(即,如果元素是一个数组,通过索引进一步深入,如果元素是一个字符串,请使用字符串)
我已经尝试使用该ref函数来查询每个数组元素.它似乎适用于ARRAYs的元素,但如果元素是一个字符串,我希望ref返回SCALAR.然而ref()似乎什么也没有回报.我究竟做错了什么?我认为ref()会回归一些东西.
以下是一些示例代码:
my @array = ("string1",
["ele1_arraystr1", "ele1_arraystr2"],
"string2",
["ele4_arraystr1", "ele4_arraystr2"],
"etc");
my $tmp;
&foobar( 30, 20, \@array);
sub foobar {
my($var1, $var2, $array_ref) = @_;
foreach $element (@$array_ref) {
my $tmp = ref($element);
print "Array element type: $tmp\n";
if ($tmp eq 'ARRAY') {
print " ARRAY: $element->[1]\n";
} elsif ($tmp eq 'SCALAR') {
print " SCALAR: $element\n";
} else {
print " Unexpected type: $tmp\n";
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样: …
我一直在寻找一种方法来检查用户提供的特定URL的更改.我写了一个脚本,我在家里跑,可以成功地使用WWW::Mechanize.问题是,我需要在另一个计算机网络中运行它,该计算机网络具有阻止所有$mech->get($url)请求的组策略(这不是防火墙问题,我让Perl通过),所以我想我会尝试通过让Perl控制来解决这个问题网络浏览器.
网络中的计算机仅运行谷歌浏览器和IE8,由于其他政策(想到使用WWW::Mechanize::Firefox),我无法安装Firefox .我不想在脚本中调用IE8,因为将提供的大多数网址都是不适合它的网站,因此只留下Chrome.
正在搜索可以做到这一点的模块,我只发现AnyEvent::Chromi:
它通过websocket连接公开所有Chrome Extensions API.
这不起作用(该策略可能也阻止了websocket).
还有其他方法可以解决此问题/从Perl脚本中控制Chrome吗?
让我们假设我们有这个代码,为什么它失败了显式包名称错误,因为函数只在声明后才被调用$value?
use strict;
use warnings;
sub print_value{
print "\n$value";
}
my $value = 2;
print_value();
Run Code Online (Sandbox Code Playgroud)
这在编译时失败:
Global symbol "$value" requires explicit package name at file.pl line 5.
Execution of file.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
这段代码完美无缺:
use strict;
use warnings;
my $value = 2;
print_value();
sub print_value{
print "\n$value";
}
Run Code Online (Sandbox Code Playgroud)
忽略这种编程风格或不推荐的编码风格的无用性,只关注上下文.
我知道calloc会分配内存并向每个单元写入零,所以我的问题是:使用calloc或malloc与运行向其写入NULL的单元之间有区别吗?calloc的零是否等于NULL?
在我写的最后一个脚本中,我需要一个类似于switch语句行为的行为.在Perl中简单搜索一个等价物导致我use Switch.一开始,一切都很好并且正常工作,直到所有内容都崩溃了并且描述性错误(它发生在具有正则表达式的情况的switch语句中,但奇怪的是它并没有发生在其他类似的switch语句中).
编辑:崩溃的代码看起来像这样:
switch ($var) {
case /pattern1/ {...}
case /pattern2/ {...}
...
else {...}
}
Run Code Online (Sandbox Code Playgroud)
这导致我放弃使用Switch.pm和寻找替代方案.
我发现,given和for-when,当然总是有简单的,有点幼稚if-elsif-else.
Switch.pm这么不稳定?given与for-when具有类似的结构,但我想有区别(因为两者存在).它是什么?if-elsif-else明显慢于其他选项?