小编zdi*_*dim的帖子

如何在两个图案之间打印线条?

我想将行之间@cluster t.# has ### elements(包括此行)之间的所有内容打印出来,并@cluster t.#+1 has ### elements(最好省略此行)从我的输入文件打印到相应编号的输出文件(clust(#).txt)中。到目前为止,该脚本创建了没有任何内容的适当编号的文件。

#!/usr/bin/perl 

use strict;
use warnings;

open(IN,$ARGV[0]);

our $num = 0;

while(my $line = <IN>) {
    if ($line =~ /^\@cluster t has (\d+) elements/) {
        my $clust = "full";
        open (OUT, ">clust$clust.txt");

    } elsif ($line =~ m/^\@cluster t.(\d+.*) has (\d+) elements/) {
        my $clust = $1;
        $num++;
        open (OUT, ">clust$clust.txt");
        print OUT, $_ if (/$line/ ... /$line/);
    }
}
Run Code Online (Sandbox Code Playgroud)

regex string perl

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

Perl:是否可以撤消 SIG{INT} 捕获?

我正在尝试在我的 Perl 程序中添加一个捕获信号。当 ctrl+C 发生时,我想要一条确认消息和一个用户输入( Y 或 N )。Y 输入工作正常。

如果用户输入 N,那么基本上我想“取消” ctrl+C 命令并返回到脚本。

编码:

$SIG{INT} = \&catchSignal;
$SIG{TERM} = \&catchSignal;

sub catchSignal
{
   my $ans;
   print " Are you sure you want to quit? Y or N:\n";
   $ans = <STDIN>;

   chomp $ans;

   if( $ans eq "Y" )
   {
      exit;
   }
   else
   {
      # Cancel the ctrl+C command
   }

}
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

perl signals

4
推荐指数
1
解决办法
142
查看次数

从外部命令读取文件时“last”导致 perl 崩溃

我有以下代码:

#!/usr/bin/env perl

use 5.0360;
use warnings FATAL => 'all';
use autodie ':default';
use Devel::Confess 'color'; # not essential, but better error reporting

open my $view, "zcat a.big.file.vcf.gz|"; # zcat or bcftools
while (<$view>) {
    next unless /^#CHROM\t/;
    last;
}
close $view;
Run Code Online (Sandbox Code Playgroud)

上面的代码因错误而崩溃

Can't close(GLOB(0x55adfa96ebf8)) filehandle: '' at (eval 11)[/home/con/perl5/perlbrew/perls/perl-5.36.0/lib/5.36.0/Fatal.pm:1683] line 74
 at (eval 11)[/home/con/perl5/perlbrew/perls/perl-5.36.0/lib/5.36.0/Fatal.pm:1683] line 74.
    main::__ANON__[(eval 11)[/home/con/perl5/perlbrew/perls/perl-5.36.0/lib/5.36.0/Fatal.pm:1683]:86](GLOB(0x55adfa96ebf8)) called at mwe.pl line 13
Command exited with non-zero status 255
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释掉last代码运行没有问题,但是文件很大,这会在运行时间上产生显着差异。

如果我删除该代码也可以工作,close $view但这close …

perl sigpipe

4
推荐指数
1
解决办法
132
查看次数

LogicalOperators:我们何时使用运算符OR,何时使用||

我正在使用Perl编写一个小脚本,我很困惑哪个逻辑运算符必须用于比较字符串

示例代码:

if (($app eq "appname1")OR($app eq "appname2")OR($app eq "appname3"))
Run Code Online (Sandbox Code Playgroud)

我必须使用OR(或)||

perl

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

Perl拆分和正则表达式不敏感

我有一个字符串,其中的分隔符是单词,并且不区分大小写,如下所示

Data1 Sep Data2 Sep date 3 SEP Data4 SeP Data 5

我正在写这样的东西:

split /(sep|SEP|Sep|seP)/, $string
Run Code Online (Sandbox Code Playgroud)

是否有一个选项列出拆分以区分数据以区分大小写?

perl

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

hashref查找中的语法错误,看不到原因

perl -E 'say for map s/(æ|ø|å)/   {qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
perl -E 'say for map s/(æ|ø|å)/"".{qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
Run Code Online (Sandbox Code Playgroud)

上面的第一行给了我,syntax error at -e line 1, near "}->"但第二行给了我roedgulblaa预期的一样。这是编译器的弱点,还是有我看不见的某些原因?我测试并在版本5.10、5.22和5.26中获得了此行为。

perl reference hashref

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

如何:# use perl eval 'exec perl -S $0 ${1+"$@"}' 设置 perl 版本?

我必须调试一个旧的 perl 脚本,它显然是以一种我不理解的方式设置 perl 的版本......

: # use perl
    eval 'exec perl -S $0 ${1+"$@"}'
    if 0;
Run Code Online (Sandbox Code Playgroud)

perl -h说这-S意味着“使用 PATH 环境变量查找程序文件”。 $0是当前程序。我读过这$@意味着“来自最后一个eval命令的 Perl 语法错误消息”。但是他们为什么要加 1 呢?这一切是如何结合在一起的?它在做什么?

我必须调试的部分内容与它选择了我不想要的旧版本 perl 的事实有关。对于其他一切,我们使用#!/usr/bin/env perl它,我怀疑,可能会做同样的事情。我还怀疑我的解决方案可能在于修复$PATH(或防止弄乱它的代码弄乱它)。但我想通过更好地了解它现在如何选择版本来解决这个问题。

谢谢你的帮助 !

shell perl

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

为什么我只得到第一个捕获组?

/sf/answers/161323851//sf/answers/2590295011/没有帮助我)

/proc/stat在分析 Linux 中的问题时,我开始编写一个小实用程序,但是我无法按照我想要的方式获取捕获组。这是代码:

#!/usr/bin/perl
use strict;
use warnings;

if (open(my $fh, '<', my $file = '/proc/stat')) {
    while (<$fh>) {
        if (my ($cpu, @vals) = /^cpu(\d*)(?:\s+(\d+))+$/) {
            print "$cpu $#vals\n";
        }
    }
    close($fh);
} else {
    die "$file: $!\n";
}
Run Code Online (Sandbox Code Playgroud)

例如,使用这些输入行,我得到输出:

> cat /proc/stat
cpu  2709779 13999 551920 11622773 135610 0 194680 0 0 0
cpu0 677679 3082 124900 11507188 134042 0 164081 0 0 0
cpu1 775182 3866 147044 38910 135 0 15026 …
Run Code Online (Sandbox Code Playgroud)

regex perl regex-group

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

如果文件中的项目顺序发生变化,则正则表达式不匹配

这是我第一次尝试 Perl,所以我知道这段代码很难看。其中一些来自不知道我在做什么,一些来自解决各种问题。我想要做的是搜索文件(samplefile.txt)以获取各种信息(9 个 parse_updates 函数),除非顺序发生变化,否则它可以正常工作。例如,如果一个样本文件在僵尸网络定义之前有证书包,那么它将无法找到证书包信息。我希望每个函数都开始搜索“新鲜”的示例文件,但情况似乎并非如此,我不知道为什么。不包括示例文件,因为代码帖子已经足够长,我认为问题出在我的函数逻辑中。


use strict;
use warnings;
use diagnostics;
use File::Slurp;
my @autoupdate;
my $autoupdate;

my $av_regex;
my @av_updates;

my $avdev_regex;
my @avdef_updates;

my $ipsatt_regex;
my @ipsatt_updates;

my $attdef_regex;
my @attdef_updates;


my $ipsmal_regex;
my @ipsmal_updates;

my $flowav_regex;
my @flowav_updates;

my $botnet_regex;
my @botnet_updates;

my $appdef_regex;
my @appdef_updates;

my $ipgeo_regex;
my @ipgeo_updates;

my $certbun_regex;
my @certbun_updates;

my $str1;
my $str2;
my $str3;
my $str4;
my $str5;
my $str6;
my $str7;
my $str8;
my $str9;


 
parse_updates1(); #AV Engine
parse_updates2(); #Virus …
Run Code Online (Sandbox Code Playgroud)

regex perl

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

如何以“可以”看不到的方式从基类中隐藏方法?

我尝试通过向前声明子例程来隐藏基类的方法,例如:

sub xid;
Run Code Online (Sandbox Code Playgroud)

如果我调用这个方法,我会得到预期的错误:

sub xid;
Run Code Online (Sandbox Code Playgroud)

$tuple->can( 'xid' )仍然返回真值:

DBG> $tuple->xid
ERROR: Undefined subroutine &HyperMouse::Schema::Result::SaldoAnal::xid called at (eval 2346)[/home/kes/perl5/perlbrew/perls/perl-5.24.1/lib/site_perl/5.24.1/DB/Hooks.pm:422] line 8, <STDIN> line 13.
Run Code Online (Sandbox Code Playgroud)

如何隐藏xid方法,因此$tuple->can( 'xid' )返回 false 而不是:

&HyperMouse::Schema::Result::SaldoAnal::xid
Run Code Online (Sandbox Code Playgroud)

oop perl inheritance

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

标签 统计

perl ×10

regex ×3

hashref ×1

inheritance ×1

oop ×1

reference ×1

regex-group ×1

shell ×1

signals ×1

sigpipe ×1

string ×1