On Tuesday 04 December 2007 07:28, ciwei2103 wrote:
> thans for the reply.
>
> I modify the program a bit , the $cmd output looks like:
> ========
>            Ident  Symbolic  Numeric  Slot  Type          Status
>
>     DF-1A     01A       1       1   DISK          Online
>     FA-4A     04A       4       4   FibreChannel  Online
>     FA-13A    13A      13      13   FibreChannel  Online
>     DF-16A    16A      16      16   DISK          Online
>
>
> the code is below:
> ==============
> my $cmd = "/usr/symcli/bin/symcfg -sid 0133 list -dir all";
> open  (SYMCFG, " $cmd |" ) or die "cannot open $!\n";
>
> while (  <SYMCFG> ) {
>  print $_  if /FibreChannel\s+Online/ ;
>  my ( $ident, $fa , $type, $status ) = (split /\s+/ )[0,1,4,5] if /
> FibreChannel\s+Online\s+$/ ;
>  print "$ident  $fa  $type $status \n" if defined $status ;
>
> }
> close SYMCFG ;
>
> then when run it:
> bash-2.03# ./emc_device_matching_to_fa2.pl
>     FA-4A     04A       4       4   FibreChannel  Online
>   FA-4A  4 FibreChannel
>     FA-13A    13A      13      13   FibreChannel  Online
>   FA-13A  13 FibreChannel
>
>
> if I chane the line:
> my ( $ident, $fa , $type, $status ) = (split  )[0,1,4,5] if /
> FibreChannel\s+Online\s+$/ ;
> then I got the correct results.
>
>     FA-4A     04A       4       4   FibreChannel  Online
> FA-4A  04A  FibreChannel Online
>     FA-13A    13A      13      13   FibreChannel  Online
> FA-13A  13A  FibreChannel Online
>     FA-4B     04B      20       4   FibreChannel  Online
> FA-4B  04B  FibreChannel Online
>
> so why the differience  with split vs split /\s+/ ?  thanks.

perldoc -f split
[ SNIP ]

        As a special case, specifying a PATTERN of space (' ') will
        split on white space just as `split' with no arguments does.
        Thus, `split(' ')' can be used to emulate awk's default
        behavior, whereas `split(/ /)' will give you as many null
        initial fields as there are leading spaces.  A `split' on
        `/\s+/' is like a `split(' ')' except that any leading
        whitespace produces a null first field.  A `split' with no
        arguments really does a `split(' ', $_)' internally.


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to