小编som*_*ody的帖子

如何在Perl中检查数组的所有元素是否相同?

我有一个阵列@test.检查数组中每个元素是否是同一个字符串的最佳方法是什么?

我知道我可以通过foreach循环来实现它但是有更好的方法吗?我检查了地图功能,但我不确定这是否是我需要的.

arrays perl

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

Perl:访问按值排序的hashref

我正在编写一个脚本,它将通过我的ftpd日志读取并生成如下哈希:

$stats = \{
            'user1' => {
                        'files' => 281,
                        'size' => '3724251021'
                      },
            'user2' => {
                      'files' => 555,
                      'size' => '7385856997'
                    },
            'user3' => {
                          'files' => 235,
                          'size' => '3716904486'
                        },
            'user4' => {
                       'files' => 578,
                       'size' => '8536026929'
                     }
          };
Run Code Online (Sandbox Code Playgroud)

如何使用按大小排序的键来访问此哈希?

我试过这个但是我得到一个错误,说不是hashref

foreach my $user (sort { $$stats->{$a}->{size} cmp $$stats->{$b}->{size} } keys %$stats) {

blahblahblah...
}
Run Code Online (Sandbox Code Playgroud)

perl hash

9
推荐指数
2
解决办法
5144
查看次数

分叉进程时会发生什么?

我读过关于fork的内容,根据我的理解,该过程是克隆的但是哪个过程?脚本本身或启动脚本的进程?

例如:

我正在我的机器上运行rTorrent,当一个torrent完成时,我有一个脚本运行它.此脚本从Web获取数据,因此需要几秒钟才能完成.在此期间,我的rtorrent进程被冻结.所以我使用以下内容编写了脚本fork

my $pid = fork();
if ($pid == 0) { blah blah blah; exit 0; }
Run Code Online (Sandbox Code Playgroud)

如果我从CLI运行这个脚本,它会在一秒钟内回到shell,而它在后台运行,正如我想要的那样.但是,当我从rTorrent运行时,它似乎比以前更慢.究竟是什么分叉了?rtorrent进程是否克隆了自己并且我的脚本在那里运行,或者我的脚本是否克隆了自己?我希望这是有道理的.

unix linux perl posix fork

6
推荐指数
2
解决办法
773
查看次数

分析图像复杂性

有没有可用于分析图像复杂性的算法?基本上我正在编写一个Perl脚本,它将使用system()函数在后台启动MPlayer,为输入视频文件生成10到20个屏幕截图,我希望它能够丢弃任何简单的图像,如拍摄天空,或黑色背景,以及其他简单的图像,并保留其中3个具有最高复杂性或大多数颜色的图像.我可以用一个模块或单独的程序来实现这个目标吗?我猜也许Image :: Magick可以照顾这个.

perl imagemagick

6
推荐指数
1
解决办法
1553
查看次数

Perl - 如何转义/编码特殊字符

我正在为IRC编写脚本,有时我可能需要使用颜色.通常我会这样做

my $C = chr(3);
Run Code Online (Sandbox Code Playgroud)

$C是用于颜色的控制代码,但我看到一些其他脚本逃脱它像"\ x\v ...".我如何获得正确的编码版本?我试过Data::Dumper但我找不到它.我希望这个问题有道理.

perl

4
推荐指数
2
解决办法
4958
查看次数

Perl数组和使用map的哈希操作

我有以下测试代码

use Data::Dumper;

my $hash = {
            foo => 'bar',
            os  => 'linux'
           };

my @keys = qw (foo os);

my $extra = 'test';

my @final_array = (map {$hash->{$_}} @keys,$extra);

print Dumper \@final_array;
Run Code Online (Sandbox Code Playgroud)

输出是

$VAR1 = [
          'bar',
          'linux',
          undef
        ];
Run Code Online (Sandbox Code Playgroud)

难道元素不应该是"bar,linux,test"吗?为什么最后一个元素未定义,如何将元素插入@final_array?我知道我可以使用push函数但是有没有办法将它插入到与使用map命令相同的行上?

基本上,操作数组意味着在实际脚本中的SQL命令中使用,我想避免在此之前使用额外的变量,而是执行以下操作:

$sql->execute(map {$hash->{$_}} @keys,$extra);
Run Code Online (Sandbox Code Playgroud)

arrays sqlite perl hash

3
推荐指数
2
解决办法
2311
查看次数

标签 统计

perl ×6

arrays ×2

hash ×2

fork ×1

imagemagick ×1

linux ×1

posix ×1

sqlite ×1

unix ×1