小编hma*_*tt1的帖子

管道Perl脚本输出到head -n 10打印10行后会杀死脚本

我的Perl脚本输出并记录了许多行文本,并进行了一些清理并压缩了END块中的一些日志.

问题是当您在命令行上执行以下操作时:

perl myscript.pl | head -n 10
Run Code Online (Sandbox Code Playgroud)

这会导致脚本在输出10行后立即死亡,因此END块不会执行,并且日志不会被压缩.有没有办法解决这个问题,并确保我的END块中的代码仍然执行?

unix linux perl head

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

为什么'$ _'与Perl单行中的$ ARGV相同?

我试图在Perl单行中打印单引号时遇到了这个问题.我最终想通了你必须逃脱它们'\''.这里有一些代码来说明我的问题.

让我们从打印文本文件开始.

perl -ne 'chomp; print "$_\n"' shortlist.txt

red
orange
yellow
green
blue
Run Code Online (Sandbox Code Playgroud)

现在让我们为每行打印文件的名称.

perl -ne 'chomp; print "$ARGV\n"' shortlist.txt

shortlist.txt
shortlist.txt
shortlist.txt
shortlist.txt
shortlist.txt
Run Code Online (Sandbox Code Playgroud)

然后我们可以在每一行周围添加单引号.

perl -ne 'chomp; print "'$_'\n"' shortlist.txt

shortlist.txt
shortlist.txt
shortlist.txt
shortlist.txt
shortlist.txt
Run Code Online (Sandbox Code Playgroud)

等等没有用.让我们再试一次.

perl -ne 'chomp; print "'\''$_'\''\n"' shortlist.txt

'red'
'orange'
'yellow'
'green'
'blue'
Run Code Online (Sandbox Code Playgroud)

所以我现在就开始工作了.但我仍然对为什么'$ _'评估程序名称感到困惑.也许这很容易,但有人可以解释或链接到一些文档吗?

编辑:我在Red Hat 5上运行Perl 5.8.8

bash perl sh

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

为什么添加测试指令会导致GNU程序集中的分段错误?

我无法追踪分段错误.在将我的c程序编译为汇编之后,我正在编辑它并添加一些东西.

我添加了一些代码,包括本节:

.SB1:
         call fib
         jmp     .LBL2
Run Code Online (Sandbox Code Playgroud)

那部分工作正常.但现在我想打电话给测试,也许会跳到另一个标签.现在,我只是在玩它,看看我是否可以学习如何运作(采取婴儿步骤).所以我把代码更改为:

.SB1:
         call fib
         test    %esp, 0xfffffff
         jz      .SB2
         jmp     .LBL2
.SB2:
         jmp     .LBL2
Run Code Online (Sandbox Code Playgroud)

但是现在我遇到了分段错误.谁知道为什么?如果您需要更多信息或希望代码重现,请告诉我.

c assembly gnu

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

这个混淆Perl的工作原理是什么?

    #!/bin/perl
    use strict;
    use warnings;
    my($japh,$q,$qq,%b)= "Just another Perl hacker\n";
    $_=join'',(
    07625127776,
    0122456410,
    03441733416,
    01420121552,
    04373570104,
    07143446334);s#9#f#;#s;#f#9#s;;
    s}9}b};$q=$_;*9=
    sub {
        $japh = "";
        print $japh;
    }; map { /^((?i)(?#q#;
    print $japh;#()[^
    for (my $(b) = 1; $(b) < $(q); \$b++;) {
        \/g])+[\](^.^)\[
    }
    ]*$/x?do{$qq=((ord)-96).(~~%b-$?)
    ;$/#;
    =$+;$q=~s/$qq/${\/}/g;}:9->({});
    }qw(
    a b c d e f g h i j k l m n o p q r s t u v w x y z
    );$qq=[$q,%b];$\=pack q*h\**
    ,qq$$.$$qq[0];9->();
Run Code Online (Sandbox Code Playgroud)

我认为很多是额外的/纯粹的混淆.我知道我们将"只是另一个Perl黑客"分配给$ japh,我们打印它但是在我们这样做之前将它分配给""我不知道它是如何工作的.有人能解释一下这里发生了什么吗?谢谢!

perl

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

在Python中从HEX转换为SIGNED DEC

我有一个HEX数据文件我想用python将它转换为SIGNED DECIMAL. int('0xffd2',16)因为它将HEX转换为无符号DEC,所以不是解决方案.知道怎么做吗?

0xffd2, 65490

0xffcb, 65483

0xffcb, 65483

0xffcc, 65484

0x10, 16

0xc, 12

0xd, 13

0x0, 0

0xfffe, 65534
Run Code Online (Sandbox Code Playgroud)

python

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

正则表达式是什么\ b相当于并且有没有办法去除它?

我有兴趣更改正则表达式单词边界\b以包含其他字符(例如,a .不会计为边界).我知道它是\w\W人物之间的界限.

  my $_ = ".test";
  if ( /(\btest\b)/ ){
    print;
    print " $1\n";
  }
  if ( /((?:(?<=\W)|^)test(?:(?=\W)|$))/ ){
    print;
    print " $1\n";
  }
Run Code Online (Sandbox Code Playgroud)

这就是我提出的,而我所要做的就是改变\W类似的东西[^\w.],但我仍然想知道Perl如何\b在正则表达式中解释.我试着像这样贬低它:

my $deparser = B::Deparse->new("-sC", "-x10");

print $deparser->coderef2text( sub { 
          my $_ = ".test";
          if ( /(\btest\b)/ ){
            print;
            print " $1\n";
          }
          if ( /((?:(?<=\W)|^)test(?:(?=\W)|$))/ ){
            print;
            print " $1\n";
          }
       });
Run Code Online (Sandbox Code Playgroud)

我希望它会扩展\b到相当于它的东西.什么\b相当于?你能\b以某种方式进一步解密或其他表达吗?

regex perl

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

为C编写家庭作业的简介

在我的编程任务介绍中,我遇到了一个问题.我必须创建一个运输计算器,根据它的重量和发送包裹的程度来运送您的包裹.他们只能运送10磅的包裹.

费用基于每运送500英里.它们不是按比例分配的,即600英里与900英里的费用相同,即600英里被计为2个500英里的分段.

这是他们给我的表格:

包装重量率每500英里运输2磅或更少$ 1.50超过2但不超过6 $ 3.70超过6但不超过10 $ 5.25

问题是我每次进入:

重量:1.0英里:2000

当它被认为是6.00美元时,我得到58.50美元.这是我的代码如下.顺便说一句,我不能使用循环.

#include <stdio.h>

int main(void){

    float weight, shippingCharge;
    int miles, mTotal, mModule, fTotal;

    printf("Weight: ");
    scanf("%f", &weight);

    printf("Miles: ");
    scanf("%d", &miles);


        mTotal = miles / 500;
        mModule = miles % 500;

    if(mModule > 0){
        fTotal = mTotal + 1;
    }

    if( weight <= 2){
        shippingCharge = fTotal * 1.50;
        printf("Your shipping charge is $%.2f\n", shippingCharge);
    }else{
        if(weight >= 2 && weight <= 6){
            shippingCharge = fTotal * 3.70;
            printf("Your …
Run Code Online (Sandbox Code Playgroud)

c

-1
推荐指数
1
解决办法
504
查看次数

标签 统计

perl ×4

c ×2

assembly ×1

bash ×1

gnu ×1

head ×1

linux ×1

python ×1

regex ×1

sh ×1

unix ×1