Ho bisogno di aiuto per quanto riguarda gli array in PerlCome utilizzare un array come attributo oggetto in Perl?
Questo è il costruttore che ho.
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} };
}
(Il codice è stato modificato in base ai suggerimenti dei 'gbacon', grazie)
sto spingendo i percorsi relativi in una matrice 'includeobjects' in una dinamica modo. I file includep vengono letti da un file xml e vengono inseriti in questo array.
# PacketInput.pm
if($element eq 'Include')
{
while(my($key, $value) = each(%attrs))
{
if($key eq 'Path')
push(@includeobjects, $value);
}
}
Così, l'includeobject sarà in questo modo:
@includeobjects = (
"./input/myMockPacketName",
"./input/myPacket/my3/*.txt",
"./input/myPacket/in.html",
);
Sto usando questa linea per insieme include percorso
$newPacket->SetIncludePath(@includeobjects);
Anche in PacketInput.pm
, ho
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";
}
}
Ho molte pa ckets, quindi sono scorrendo ogni pacchetto
# 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);
}
I metodi get e set funzionano bene per PacketName. Ma dal momento che IncludePath è un array, non riesco a farlo funzionare, voglio dire che i percorsi relativi non vengono stampati.
Ow my eyes. Perché non stai usando 'use strict; usa avvertimenti; '? – Ether
grazie per avermelo fatto notare !! Ora li sto usando. :) – superstar
L'assegnazione a '@ includeobjects' ha un errore di sintassi che non consente al programma di funzionare affatto (che è possibile correggere modificandolo in' @includeobjects = qw [./input/myMockPacketName ./input/myPacket /my3/*.txt ./input/myPacket/in.html]; '). Si prega di copiare e incollare in modo che possiamo aiutarti a correggere il tuo codice invece di indovinare cosa potrebbe essere. –