小编PPP*_*PPP的帖子

Perl:文件句柄存储完整的文件内容而不是每一行

文件“/serrs/env.txt”的内容是:

abc
def
ghi jkl mno
good is the conet
Run Code Online (Sandbox Code Playgroud)

代码片段是:

use strict;
use warnings;

my $ModeRefFile;
open(FH2, '<', "/home/vivi/ee/ppp.pl") or die $!;   
local $/ = undef;
$ModeRefFile = <FH2>;
close(FH2);

open(FH3, '<', "/serrs/env.txt") or die $!;
while (<FH3>)   {
     chomp ($_);
     print "$_ is the line which is being read\n";
}
close(FH3);
       
Run Code Online (Sandbox Code Playgroud)

输出:

abc
def
ghi jkl mno
good is the conet is the line which is being read
Run Code Online (Sandbox Code Playgroud)

我想要什么(预期):

abc is the line which is being read
def …
Run Code Online (Sandbox Code Playgroud)

perl

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

如何检查 Perl 中传递的命令行参数的数量?

我有一个按以下方式运行的脚本:

perl testing.pl -grid 24 -range 97   ## Here, arguments passed are processed via getopt::Long module.
Run Code Online (Sandbox Code Playgroud)

现在,我想检查传递给脚本的命令行参数的数量。预期是 2。但我得到 0。

我在脚本(testing.pl)中使用了下面的代码来提取参数的数量:

my $totalCmdLineArg = $#ARGV + 1;
print "$totalCmdLineArg is total command line arguments\n";
if ($totalCmdLineArg <= 0 ) {
    $defaultmode=1;
} else {
    $defaultmode=0;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我得到“0 是命令行参数总数”作为输出。我希望“2 是总命令行参数”作为输出。我怎样才能得到预期的答案?

注意:有 100 多个参数,其中任何一个都可以传递。

perl argv

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

Perl:使用 cygwin perl 运行 perl 脚本时找不到启动命令 (Windows)

下面是setup.pl的代码:

my  $fileToCopy= "ewq_file.bat";
my $destination = $ENV{PREPARE};   ### $destination = C:\Windows
if ( -f "$destination\\$fileToCopy" ) {
    print "Triggering $destination\\$fileToCopy\n";
    system("start $destination\\$fileToCopy"); 
}
Run Code Online (Sandbox Code Playgroud)

触发时:C:\cygwin\bin\perl.exe setup.pl

输出:

Triggering C:\Windows\ewq_file.bat
sh: start: command not found
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

windows perl cygwin

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

如何检查命令的退出状态?

我有一个代码片段:

my @array=("abc","def", "ghi");
print "I am testing exit code\n";
grep /lan/, @array;    
if ($?) {
  print "status is 0\n";
 }
else {
  print "Status is 1\n";
}
Run Code Online (Sandbox Code Playgroud)

我在输出中得到“状态为 1”,但我想要“状态为 0”。根据我的理解,在 中@array,找不到“lan”,因此退出状态必须非零,因此应打印“status is 0”。

为什么 Perl 没有给出正确的退出代码?如果我按照上面的理解是错误的,请给出关于退出代码理论的正确想法?

perl exit-code

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

Perl:需要在变量字符串中动态替换,而不是在解析期间

my @banks = @banksDup= ("abs", "qer", "qaz");
my $serverFailedabs;
my $serverFailedqer;
my $serverFailedqaz;

### Some processing of $serverFailedabs, $serverFailedqer and $serverFailedqaz happens here ###

foreach my $bank (@banks) {
        if("$serverFailed${bank}" ne "")    ## Line 85
        {
                print "$bank server setup failed;
                @banksDup = grep !/${bank}/, @banksDup;
        }
    }
Run Code Online (Sandbox Code Playgroud)

错误:

Global symbol "$serverFailed" requires explicit package name at perl1.pl line 85
Run Code Online (Sandbox Code Playgroud)

这里,“$serverFailed${bank}”在解析阶段被认为是$serverFailed,并给出错误。我怎样才能避免这个问题?

我希望在执行期间执行“$serverFailed${bank}”,以便“$serverFailed${bank}”获得正确的值

perl interpreter

0
推荐指数
1
解决办法
65
查看次数

标签 统计

perl ×5

argv ×1

cygwin ×1

exit-code ×1

interpreter ×1

windows ×1