hello
im in trouble when adding identical elements into a hash like in the
script below.
i want to print:
2 kr
3 %
2 kr
4 kr


but fail on the third line which is identical to the first.
i have tried with the exists function but i reckon the problem must be
in the foreach loop thru the hash elements (which is one element too
short and therefore will fail subsequently).

are there any hash-workarounds for this - (im able to solve the script
task otherwise, but would really like to use a hash due to performance).

thanks
allan




#!perl

my $input = "<dcv id=1 more vartype=1>\n<dcv id=2 more vartype=2>\n<dcv
id=1 more vartype=1>\n<dcv id=3 more vartype=1>\n";

my %xmlHash;
my $aspVariable = perlMainLoop($input);
print $aspVariable;

sub perlMainLoop {
        my $output = $_[0];
        perlGetXml($output); 
        foreach my $key (keys %xmlHash) {
                my @temp = split(/::/, $xmlHash{$key});
                my $var = $temp[1] == 1 ? " kr" : " %";
                my $repValue = calculate($temp[0]); 
                $output =~s/$key/$repValue$var/;
        }       
        return $output; 
}

sub calculate {
        $_ = $_[0];
        my $use = ($_ + 4) -3;
        return $use
}

sub perlGetXml {
        $_ = $_[0];
        my $temp; 
        while (/(<dcv[^>]+id=(\d+)[^>]+vartype=(\d+)>)/ig) {
                $temp = $1;
                $xmlHash{$temp} = "$2::$3";
        }
        return %xmlHash;
}

Reply via email to