Front page | perl.beginners |
Postings from April 2012
Re: Array of Hashes - problem solved
Thread Previous
From:
Paul.G
Date:
April 12, 2012 06:28
Subject:
Re: Array of Hashes - problem solved
Message ID:
1334237304.5990.YahooMailNeo@web39305.mail.mud.yahoo.com
Hi All
I have solved the problem, I would be interested in any comments however on this script. Positive and negative comments are welcome.
#!/usr/bin/perl
use strict;
use warnings;
my @vggroup;
my @PV;
my $PV=0;
my $Extents;
my $AllocatedPE;
my $rec = {};
my $href;
my $extent;
open(CMD,"/usr/sbin/vgdisplay -v vg03|");
while(<CMD>) {
if (/PV Name/) {
$PV = (split(/\s+/, $_))[3];
push @PV, $PV;
}
}
foreach $PV (@PV) {
open(EXT,"/usr/sbin/pvdisplay $PV|");
while(<EXT>)
{
if (/Allocated PE/) {
$AllocatedPE = (split(/\s+/, $_))[2]; <--- Replaced <EXT> with $_ and problem is solved
$rec->{$PV} = $AllocatedPE;
print "$PV ";
print $rec->{$PV};
print " \n";
push @vggroup, $rec;
}
}
}
for $href (@vggroup) {
print "{ ";
for $extent ( keys %$href ) {
print "$extent=$href->{$extent} ";
}
print "}\n";
}
close(EXT);
close(CMD)
________________________________
From: Paul.G <medura43@yahoo.com.au>
To: "beginners@perl.org" <beginners@perl.org>
Sent: Thursday, 12 April 2012 9:48 PM
Subject: Array of Hashes
Hi All
New to this group, so hello to everybody.
I am currently working on creating a Array of Hashes, note it is a work in progress. I
appear to be getting some corruption when inputting data with the pvdisplay, I can't see why this is the case. I have put
some print statements to see where I am going wrong and I suspect the logic of the script is incorrect. Below is the script:
Scroll down further to see the output and hopefully it will make sense what I am asking.
#!/usr/bin/perl
use strict;
use warnings;
my @vggroup;
my @PV;
my $PV=0;
my $Extents;
my $AllocatedPE;
my $rec = {};
my $href;
my $extent;
open(CMD,"/usr/sbin/vgdisplay -v vg03|");
while(<CMD>) {
if (/PV Name/) {
$PV = (split(/\s+/, $_))[3];
push @PV, $PV;
}
}
print "@PV \n";
foreach $PV (@PV) {
open(EXT,"/usr/sbin/pvdisplay $PV|");
while(<EXT>) { <-- This is aware I appear to be going wrong, scroll down further.
print $_; <---
if (/Free PE/) {
$AllocatedPE = (split(/\s+/, <EXT>))[2];
$rec->{$PV} = $AllocatedPE;
print "$PV ";
print $rec->{$PV};
print " \n";
push @vggroup, $rec;
}
}
}
for $href (@vggroup) {
print "{ ";
for $extent ( keys %$href ) {
print "$extent=$href->{$extent} ";
}
print "}\n";
}
close(EXT);
close(CMD)
Result:
/dev/disk/disk46 /dev/disk/disk48 /dev/disk/disk47
/dev/disk/disk46 159
/dev/disk/disk48 159
/dev/disk/disk47 0
{ /dev/disk/disk46=159 /dev/disk/disk48=159 /dev/disk/disk47=0 }
{ /dev/disk/disk46=159 /dev/disk/disk48=159 /dev/disk/disk47=0 }
{ /dev/disk/disk46=159 /dev/disk/disk48=159 /dev/disk/disk47=0 }
/dev/disk/disk46 /dev/disk/disk48 /dev/disk/disk47
--- Physical volumes ---
PV Name /dev/disk/disk46
VG Name /dev/vg03
PV Status available
Allocatable yes
VGDA 2
Cur LV 1
PE Size (Mbytes) 64
Total PE 159
Free PE 0
/dev/disk/disk46 159 <-- The lines in bold are getting inserted, when reading with the pvdisplay. I should be seeing --> Allocated PE 0
Stale PE 0 Why is this occurring?
IO Timeout (Seconds) default
Autoswitch On
Proactive Polling On
--- Physical volumes ---
PV Name /dev/disk/disk48
VG Name /dev/vg03
PV Status available
Allocatable yes
VGDA 2
Cur LV 1
PE Size (Mbytes) 64
Total PE 159
Free PE 0
/dev/disk/disk48 159
Stale PE 0
IO Timeout (Seconds) default
Autoswitch On
Proactive Polling On
--- Physical volumes ---
PV Name /dev/disk/disk47
VG Name /dev/vg03
PV Status available
Allocatable yes
VGDA 2
Cur LV 0
PE Size (Mbytes) 64
Total PE 159
Free PE 159
/dev/disk/disk47 0
Stale PE 0
IO Timeout (Seconds) default
Autoswitch On
Proactive Polling On
Cheers
Thread Previous