Necesito ayuda con respecto a las matrices en Perl¿Cómo uso una matriz como un atributo de objeto en Perl?
Este es el constructor que tengo.
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} };
}
(El código ha sido modificado de acuerdo con las sugerencias de los 'gbacon', gracias)
estoy empujando las rutas relativas en serie '' includeobjects en una dinámica camino. Los includepaths se leen desde un archivo xml y se insertan en este conjunto.
# PacketInput.pm
if($element eq 'Include')
{
while(my($key, $value) = each(%attrs))
{
if($key eq 'Path')
push(@includeobjects, $value);
}
}
Así, el includeobject será así:
@includeobjects = (
"./input/myMockPacketName",
"./input/myPacket/my3/*.txt",
"./input/myPacket/in.html",
);
estoy usando esta línea de juego de incluir el trazado de
$newPacket->SetIncludePath(@includeobjects);
También en PacketInput.pm
, tengo
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";
}
}
Tengo muchos pa ckets, así que estoy recorriendo cada paquete
# 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);
}
Los métodos get y set funcionan bien para PacketName. Pero como IncludePath es una matriz, no pude hacer que funcione, es decir, las rutas relativas no se están imprimiendo.
Ow my eyes. ¿Por qué no estás usando 'use strict; usa advertencias; '? – Ether
gracias por señalarlo !! Ahora los estoy usando. :) – superstar
La asignación a '@ includeobjects' tiene un error de sintaxis que no permitirá que su programa se ejecute en absoluto (que puede corregir cambiándolo a' @includeobjects = qw [./input/myMockPacketName ./input/myPacket /my3/*.txt ./input/myPacket/in.html]; '). Copie y pegue para que podamos ayudarlo a corregir el código en lugar de adivinar de qué se trata. –