我希望您能帮忙翻译一下有关Perl中数组的内容。
这是我拥有的构造函数。
BuildPacket.pm
sub new {
my $class = shift;
my $Packet = {
_PacketName => shift,
_Platform => shift,
_Version => shift,
_IncludePath => [@_],
};
bless $Packet, $class;
return $Packet;
}
sub SetPacketName {
my ( $Packet, $PacketName ) = @_;
$Packet->{_PacketName} = $PacketName if defined($PacketName);
return $Packet->{_PacketName};
}
sub SetIncludePath {
my ( $Packet, @IncludePath ) = @_;
$Packet->{_IncludePath} = \@IncludePath;
}
sub GetPacketName {
my( $Packet ) = @_;
return $Packet->{_PacketName};
}
sub GetIncludePath {
my( $Packet ) = @_;
@{ $Packet->{_IncludePath} };
}
这段代码根据 'gbacon' 的建议进行了修改,感谢他的意见。
我以动态的方式将相对路径推送到 'includeobjects' 数组中。包含路径从一个xml文件中读取,并被推送到该数组中。
# PacketInput.pm
if($element eq 'Include')
{
while( my( $key, $value ) = each( %attrs ))
{
if($key eq 'Path')
push(@includeobjects, $value);
}
}
因此,includeobject 将是这样的:
@includeobjects = (
"./input/myMockPacketName",
"./input/myPacket/my3/*.txt",
"./input/myPacket/in.html",
);
我正在使用这行代码来设置包含路径。
$newPacket->SetIncludePath(@includeobjects);
同样在
PacketInput.pm
中,我有以下内容。sub CreateStringPath
{
my $packet = shift;
print "printing packet in CreateStringPath".$packet."\n";
my $append = "";
my @arr = @{$packet->GetIncludePath()};
foreach my $inc (@arr)
{
$append = $append + $inc;
print "print append :".$append."\n";
}
}
我有许多数据包,因此我正在循环遍历每个数据包。
# PacketCreation.pl
my @packets = PacketInput::GetPackets();
foreach my $packet (PacketInput::GetPackets())
{
print "printing packet in loop packet".$packet."\n";
PacketInput::CreateStringPath($packet);
$packet->CreateTar($platform, $input);
$packet->GetValidateOutputFile($platform);
}
get和set方法对PacketName有效。但是由于IncludePath是一个数组,我无法使其工作,我的意思是相对路径没有被打印出来。
use strict; use warnings;
? - Ether@includeobjects
的赋值语句存在语法错误,这会导致程序无法运行(您可以通过将其更改为@includeobjects = qw[ ./input/myMockPacketName ./input/myPacket/my3/*.txt ./input/myPacket/in.html ];
来解决此问题)。请复制并粘贴代码,以便我们帮助您修复代码,而不是猜测可能的错误。 - Greg Baconpush(@includeobjects,$value)
周围的大括号。重要的是您复制并粘贴代码而不是重新输入。我修改了我的答案,使用与您相同的@includeobjects
,输出看起来很好。您告诉我们您没有得到的输出,那么您得到了什么?这也是重要信息! - Greg BaconPacketInput.pm
是否启用了strict
严格模式?GetIncludePath
返回一个数组,但是CreateStringPath
使用了@{$packet->GetIncludePath()}
,这将其视为对数组的引用。我会修改我的答案,让GetIncludePath
对其返回值更加智能化,使用wantarray
。 - Greg Bacon