文件“/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 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 多个参数,其中任何一个都可以传递。
下面是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)
我该如何解决这个问题?
我有一个代码片段:
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 没有给出正确的退出代码?如果我按照上面的理解是错误的,请给出关于退出代码理论的正确想法?
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}”获得正确的值