Hi Sunita, On Fri, Dec 02, 2011 at 04:39:20AM -0500, sunita.prad...@emc.com wrote: > > Hi All > > > > My array @sympd_list has following lines : > > -------------------- > > /dev/sdd 0BE0 07F:0 08C:D0 Unprotected N/Grp'd RW > 500 > > /dev/sde 0BE1 07F:0 07A:C0 Unprotected N/Grp'd RW > 500 > > /dev/sdf 0BE2 07F:0 08D:C0 Unprotected N/Grp'd RW > 500 > > /dev/sdg 0BE3 07F:0 07B:D0 Unprotected N/Grp'd RW > 500 > > /dev/sdj 201A 07H:0 07A:D5 Unprotected N/Grp'd RW > 3 > > --------------------------- > > > > > > I want second column in another array : > > > > 0BE0 > > 0BE1 > > 0BE2 > > 0BE3 > > 201A > > > > I used map function with pattern matching as >>> my @sympd_dev_list = > map {$_ =~ s/^\/\S+\s+([0-9A-F]{4}).+/$1/ } @sympd_list; > > > > I do not get correct output in map function . But if I use same pattern > matching in a foreach loop , then I get right output . > > > > Could anyone tell me what is wrong in my map function ? >
There is nothing wrong with your map function, you only forgot the tell what was matched like this [ Please not * ^^^^ * addition to your code] : my @sympd_dev_list = map {$_ =~ s/^\/\S+\s+([0-9A-F]{4}).+/$1/;$_ } @sympd_list; ^^^^ print $_ for @sympd_dev_list; # added just to display @sympd_dev_list OUTPUT ======== 0BE0 0BE1 0BE2 0BE3 201A -- Tim