krujos has asked for the wisdom of the Perl Monks concerning the following question:
and here is how I am using that code.#!/usr/local/perl -w package VRTSAgent; use Carp; use Data::Dumper; ####################################### ## This is the ADT for an agent. ####################################### my %fields = ( agent =>undef, os =>%os, version =>@versions, ); sub new { my $class = shift; my $self = {%fields}; bless $self, $class; return $self; } sub agent { if ($_[1]) { $agent = $_[1]; } return $agent; } sub version { if ($_[2]) { $version[$_[1]]=$_[2]; } return $version[$_[1]]; } sub os { if ($_[3]) { $os{$_[1]}{$_[2]} = $_[3]; } return $os{$_[1]}{$_[2]}; } sub os_keys { return keys (%os); } sub os_key_each{ return keys ( %{$os{$_[1]}} ); } sub _dump_os { print Dumper(\%os); } sub make_Versions { my ($key, @keys, @each, %ver); @keys = &os_keys; foreach $key (@keys) { @each = keys ( %{$os{$key}} ); foreach $tmp (@each) { $ver{$tmp}=1; } } @versions = keys (%ver); @versions = sort @versions; } sub get_versions { return @versions; } sub DESTROY { }
What I want is to have a separate object for all of the different objects, instead I end up with one object and an array full of ?pointers/references? to the same one. If anyone has suggestions on how to make this do what I want or how to improve either piece of code I would be grateful. Here are some typical lines of input data,#!/usr/bin/perl -w use strict; use VRTSAgent; use Data::Dumper; my (@lines, $i, @tmp); my (@agents, @keys); my ($infile, $outfile); $infile = "matrix.csv"; $outfile = "out.csv"; open (INFILE, $infile); while (<INFILE>) { chomp; push @lines, $_; } close INFILE; my $j = -1 ; my $lastAgent = "something thats not an agent"; my (@osKey, $var, $var2, $var3, @tmp2, $agent); for ($i=2; $i < @lines; $i++) { @tmp = split /,/,$lines[$i]; if($lastAgent ne $tmp[3]){ $agents[++$j]= new VRTSAgent; $agents[$j]->new(); $lastAgent = $tmp[3]; $agents[$j]->agent($tmp[3]); print "New Agent == $tmp[3]\n"; } $agents[$j]->os($tmp[1]." ".$tmp[2],$tmp[4]." ".$tmp[5],$tmp[6]); @tmp = undef; } foreach $var (@agents) { $var->make_Versions; } my @ver; foreach $var (@agents) { $agent = $var->agent; @ver= $var->get_versions; foreach $var2 (@ver){ #print "$agent $var2 \n"; } }
Thanks againSUN,Solaris 8 ,64-bit,Oracle ServerFree,9.0.1,64-bit,yes, IBM,AIX 4.3.3 ,64-bit,SAP,3.x ,64-bit,yes, IBM,AIX 4.3.3 ,64-bit,SAP,4.x,,yes, HP,HP-UX 11.11 ,32-bit,Sybase ,ASE 12.0,,yes,4.5A HP,HP-UX 11.11 ,64-bit,Sybase ,ASE 12.0,64-bit,yes,4.5A SGI,IRIX 6.5.10; 6.5.11; 6.5.12 ,64-bit,Sybase ,ASE 11.9.2,,yes,
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: When I try to create different objects i end up getting the same one over and over...
by thelenm (Vicar) on Apr 26, 2002 at 15:31 UTC | |
|
(jeffa) Re: When I try to create different objects i end up getting the same one over and over...
by jeffa (Bishop) on Apr 26, 2002 at 15:48 UTC | |
by krujos (Curate) on Apr 26, 2002 at 16:32 UTC | |
by jeffa (Bishop) on Apr 26, 2002 at 16:40 UTC | |
by krujos (Curate) on Apr 26, 2002 at 20:17 UTC | |
by jeffa (Bishop) on Apr 26, 2002 at 21:53 UTC |