小编yon*_*100的帖子

可以`转到LABEL`导致内存泄漏吗?

使用goto标签会导致内存泄漏吗?我在文档中goto找到的所有相关内容都是:

goto LABEL表格发现标有LABEL的语句,并继续执行那里.

使用安全goto LABEL吗?

memory perl goto

11
推荐指数
1
解决办法
185
查看次数

检测混合数组中的元素类型

我正在使用一些具有子程序的代码,该子程序包含一个数组引用作为参数之一.此传入数组中的元素可以是小数组或字符串.

我想确定每个元素的类型是为了做某些特定的事情(即,如果元素是一个数组,通过索引进一步深入,如果元素是一个字符串,请使用字符串)

我已经尝试使用该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)

输出看起来像这样: …

arrays perl scalar ref

7
推荐指数
1
解决办法
399
查看次数

通过Perl脚本控制Google Chrome

我一直在寻找一种方法来检查用户提供的特定URL的更改.我写了一个脚本,我在家里跑,可以成功地使用WWW::Mechanize.问题是,我需要在另一个计算机网络中运行它,该计算机网络具有阻止所有$mech->get($url)请求的组策略(这不是防火墙问题,我让Perl通过),所以我想我会尝试通过让Perl控制来解决这个问题网络浏览器.

网络中的计算机仅运行谷歌浏览器和IE8,由于其他政策(想到使用WWW::Mechanize::Firefox),我无法安装Firefox .我不想在脚本中调用IE8,因为将提供的大多数网址都是不适合它的网站,因此只留下Chrome.

正在搜索可以做到这一点的模块,我只发现AnyEvent::Chromi:

它通过websocket连接公开所有Chrome Extensions API.

这不起作用(该策略可能也阻止了websocket).

还有其他方法可以解决此问题/从Perl脚本中控制Chrome吗?

perl google-chrome

7
推荐指数
1
解决办法
1636
查看次数

为什么子例程需要在声明变量后使用呢?

让我们假设我们有这个代码,为什么它失败了显式包名称错误,因为函数只在声明后才被调用$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)

忽略这种编程风格或不推荐的编码风格的无用性,只关注上下文.

perl scope subroutine

7
推荐指数
1
解决办法
436
查看次数

calloc()和NULL

我知道calloc会分配内存并向每个单元写入零,所以我的问题是:使用calloc或malloc与运行向其写入NULL的单元之间有区别吗?calloc的零是否等于NULL?

c null calloc dynamic-memory-allocation

5
推荐指数
1
解决办法
1779
查看次数

在Perl中切换与给定与for-when与if-elsif-else

在我写的最后一个脚本中,我需要一个类似于switch语句行为的行为.在Perl中简单搜索一个等价物导致我use Switch.一开始,一切都很好并且正常工作,直到所有内容都崩溃了并且描述性错误(它发生在具有正则表达式的情况的switch语句中,但奇怪的是它并没有发生在其他类似的switch语句中).

编辑:崩溃的代码看起来像这样:

switch ($var) {
    case /pattern1/ {...}
    case /pattern2/ {...}
    ...
    else {...}
}
Run Code Online (Sandbox Code Playgroud)

这导致我放弃使用Switch.pm和寻找替代方案.

我发现,givenfor-when,当然总是有简单的,有点幼稚if-elsif-else.

  1. 为什么Switch.pm这么不稳定?
  2. 这似乎givenfor-when具有类似的结构,但我想有区别(因为两者存在).它是什么?
  3. 是否if-elsif-else明显慢于其他选项?

perl if-statement switch-statement

3
推荐指数
1
解决办法
964
查看次数