标签: perl

Perl大量下载直接到文件(避免RAM过载)

我正在尝试将具有1 GB aproximated大小的文件下载到具有1 GB RAM内存的服务器,因此如果我尝试将其下载到变量(下面的代码)中,则操作系统会因RAM过载而终止进程.

require LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->timeout(3600);
$ua->env_proxy;

my $response = $ua->get('http://example.com/largefile.xml');

if ($response->is_success) {
    print "File downloaded\n";
}
else {
    die $response->status_line;
}
Run Code Online (Sandbox Code Playgroud)

我认为可行的唯一方法是使用system("wget ...")(或卷曲或类似的东西),但我确信有一种正确的方法可以直接使用Perl.

你知道任何方法或选项直接下载到文件而不使用系统调用吗?

perl download out-of-memory large-files

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

负面前瞻RegEx

为什么这不起作用?试图做一个负面的预测.我试图从垃圾箱中取出数字,除了隔离箱和检查箱.当我使用前面的^代码匹配括号中的所有数字.当我删除^它什么都不匹配.

你也可以使用"或运算符|" 在负面的向前看?我想要^(?!Quarantine_Bin | Inspection_Bin)

我也试图特别否定[^Quarantine_Bin]它仍然匹配.

^(?!Quarantine_Bin)\([0-9]+\)
Run Code Online (Sandbox Code Playgroud)

数据

    Quarantine(2),Other_Bin(2),Quarantine_Bin(2),Quarantine_Bin(2),
    Quarantine_Bin(5),Inspection_Bin(3),Regular_Bin(5),other(2)
Run Code Online (Sandbox Code Playgroud)

regex perl

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

对参与两个参数的哈希进行排序

我有以下格式的密钥哈希:

scaffold_902_159
scaffold_2_1980420
scaffold_2_10
scaffold_10_402
Run Code Online (Sandbox Code Playgroud)

我想打印出以下列格式排序的哈希:

scaffold_2_10
scaffold_2_1980420
scaffold_10_402
scaffold_902_159
Run Code Online (Sandbox Code Playgroud)

所以首先我必须以数字方式订购第一个号码,然后参加最后一个号码.我不希望正则表达式搜索"scaffold_",因为这可能会有所不同.我的意思是,我可以使用其他格式的哈希,例如" blablabla_NUMBER_NUMBER,或blablablaNUMBER_NUMBER ".键_NUMBER的最后一部分是唯一永久的部分.

我有这个代码,但只能按数字排序第一个数字:

my @keys = sort {
          my ($aa) = $a =~ /(\d+)/;
          my ($bb) = $b =~ /(\d+)/;
          $aa <=> $bb;
        } keys %hash;
foreach my $key (@keys) {
   print $key;
}
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

sorting perl perl-module

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

使用perl替换单发中的字符串

我的意见:

my $tmp = "rrccllrrc";
Run Code Online (Sandbox Code Playgroud)

预期产出:

$tmp = "right right center center left left right right center"; #End should not be spaced definitely.
Run Code Online (Sandbox Code Playgroud)

我的代码:

$tmp=~s/c/center /g;
$tmp=~s/l/left /g;
$tmp=~s/r/right /g;
Run Code Online (Sandbox Code Playgroud)

有人可以帮助缩短尽可能多地替换正则表达式的方法.

regex perl

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

为什么在没有块的情况下调用eval会终止这个Perl程序?

以下程序在第二次调用eval时停止.这是预期的吗?我读了perldoc -f eval,并且惊讶于没有显示打印"2:..."的输出.

eval {die("The curly braces seem to rescue me! Life moves on")};
print "1: $@\n";
eval die("Program actually terminates here! Subsequent prints are not shown");
print "2: $@\n";
Run Code Online (Sandbox Code Playgroud)

perl eval

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

在Perl中,如何从STDIN中读取空格分隔数对?

我想在Perl程序中每行输入2个输入.

输入

4 3
3 1
5 7
Run Code Online (Sandbox Code Playgroud)

我们可以通过这个声明在Ruby中做到这一点

a,b=gets.split.map &:to_i
Run Code Online (Sandbox Code Playgroud)

perl

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

如何使用perl去除频率计算中的原始字符串

我在使用Perl从文本文件读取的字符串列表的频率计算方面遇到了麻烦.我想要做的是,分别计算每一行中的字符数.我的代码可以正常工作,但它也将原始字符串计算为单个字符.

这是我的代码,

sub cal_frequency{
    while (my @row = <$fd>){
    chomp;
    for (my $i=0; $i<=147; $i++){
    my %count;
            print "$row[$i]\n";
            foreach my $str (split //, $row[$i]) {
                $count{$str}++;
            }
            foreach my $str (sort keys %count) {
                printf "%-31s %s\n", $str, $count{$str} ;
            }
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出.

HMHHMSHHHNHHMEHFFHHHHHHHDHDE
                               1
D                               2
E                               2
F                               2
H                               17
M                               3
N                               1
S                               1
LLLWLFLLWLWLLWWLLLLFLLLLWLFW
                               1
F                               3
L                               18
W                               7
TTTTTDTTTTTTTTTTSTTTTSSTTATT
                               1
A                               1
D                               1
...
...
...
Run Code Online (Sandbox Code Playgroud)

有没有人可以帮我弄清楚代码有什么问题.

perl

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

如何在mongo中的嵌套文档中插入文档或字段

我想要一个名为system的集合,在该集合下有一个名为sub_systems的文档,在其下有三个名为high mid&low的文档。每个高,中和低分别包含多个文档,如下所示

systems: {
           sub_system_1 : {
                            high :{ {task1},
                                    {task2},
                                    .......
                                  },                                
                            mid  :{ {task1},
                                    {task2},
                                    .......
                                  },
                            low :{ {task1},
                                    {task2},
                                    .......
                                  },
                          },
           sub_system_2 : {
                            high :{ {task1},
                                    {task2},
                                    .......
                                  },                                
                            mid  :{ {task1},
                                    {task2},
                                    .......
                                  },
                            low :{ {task1},
                                    {task2},
                                    .......
                                  },
                          },
           ............
         }
Run Code Online (Sandbox Code Playgroud)

因此,下面是我的问题1.我将如何创建此类嵌套文档。2.如何在系统集合中插入新的子系统。3.如何在子系统文件下插入新的优先级(高,中,低)。4.如何在特定子系统和特定优先级(高,低,中)文档中插入新任务

我想使用mongo shell以及perl mongodb来了解这一点

perl mongodb mongodb-query

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

Perl中的多级继承

我有一个与Perl中的多级继承有关的问题.

这是我的代码

mod.pm

package first;

sub disp {
    print "INSIDE  FIRST\n";
}

package second;
@ISA = qw(first);

sub disp {
    print "INSIDE SECOND\n";
}

package third;
@ISA = qw(second);

sub new {
    $class = shift;
    $ref   = {};
    bless $ref, $class;
    return $ref;
}

sub show {
    $self = shift;
    print "INSIDE THIRD\n";
}

1;
Run Code Online (Sandbox Code Playgroud)

prog.pl

use mod;

$obj = third->new();
$obj->show();
$obj->disp();
Run Code Online (Sandbox Code Playgroud)

我有一个.pm文件,其中包含三个类.我想disp使用第三类对象访问第一个类中的方法.我不确定这是怎么回事.

我尝试使用两种方式访问​​:

  1. 使用类名=> first :: disp()
  2. 在第二个包中使用SUPER disp方法=> $ self-> SUPER :: disp();

但我不确定如何使用第三类对象直接访问它.

oop perl inheritance

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

为什么DBI会将整数隐式更改为字符串?

我有一个具有以下结构的MySQL表.

alid       bigint(20),
ndip       varchar(20),
ndregion   varchar(20),
occ_num    int(3),
Delta_Flag int(1)
Run Code Online (Sandbox Code Playgroud)

从表中选择数据后,我将获取所有引用的数据并作为字符串值.

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;
use FindBin;
use lib $FindBin::Bin;
use Database;

my $pwd = $FindBin::Bin;

my $db  = Database->new( 'mysql', "$pwd/config.ini" );
my $db1 = Database->new( 'mysql', "$pwd/config2.ini" );

my @tables = qw( AutoTT_AlarmStatus_Major1 );

for my $table ( @tables ) {

    my $query_select = "SELECT alid, ndip, ndregion, occ_num, Delta_Flag FROM $table LIMIT 1";
    my $result = $db->db_get_results( $query_select );

    print Dumper( $result ); …
Run Code Online (Sandbox Code Playgroud)

mysql perl dbi

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