on Tue, 30 Jul 2002 10:51:56 GMT, [EMAIL PROTECTED] (Jean
Berthold) wrote: 

> In my case :
> 
> my @array ;
> my $counter = 0 ;
> # how to declare the prototype for the record used below ???
> my $record = { FS, SNAP_PATH, TAPE_POS } ; # don't function ...

There is no need to declare a prototype. If you turn on warnings, you 
would get a 

    Odd number of elements in hash assignment at ...

warning on the line above, because Perl tries to make the following 
anonymous hash:

    my $record = { FS => SNAP_PATH,
                   TAPE_POS => undef # oops, no value available
                 };
If you 'use strict;', Perl would also give you fatal errors about 
unallowed use of barewords, since you didn't quote FS, SNAP_PATH and 
TAPE_POS. (It is always a good idea to turn on warnings and strictures 
;-)

If you use the '=>' "synonym" for the comma operator, Perl 
automatically quotes what's on the left of it, as long as it's a 
"word".

> # first loop :
> open FH_DF, "df -k -F ufs | cut -c 56-100 |" or die "can't run
> command: $|"; 
> while (<FH_DF>)
> {
>     $counter++ ;

You don't need $counter in this - see below

>     chomp;  # remove newline
>     my $record =
>     {
>         FS        => $_ ,
>         SNAP_PATH => `fssnap -i $_  | grep /dev/fssnap | cut -c
>         33-45` , 
>         TAPE_POS  => undef ,
>         STATUS    => undef ,
>     };
> 
>     # TAPE_POS and STATUS will be filled later
>     # Now, I need to store this record into a array ...
> 
>     push( @array, $record ) ; # That don't function ...

This should work without problems. Why do you think it doesn't 
function?

> }
> 
> # Second loop:
> for ( my $i = 0; $i <= $counter; $i++ )

It would be more Perl-like to write this loop as

   for my $element (@array)

without the need for a counter. In the body of the loop you can then 
use "$element" instead of "$array[$i]".

> {
>     if  ( ( system("ufsdump 0f /dev/rmt/0n $array[$i]->SNAP_PATH")

You do know that system returns 0 on success, do you?
You may want to read 'perldoc -f system' to make sure you have the 
return value you expect).

$array[$i]->SNAP_PATH should be $array[$i]->{SNAP_PATH} 
(or $element->{SNAP_PATH})

>     )  ) {
>         $array[$i]->TAPE_POS => `mt status | grep "file no=" | cut
>         -c 4-14`; ...

That should be $array[$i]->{TAPE_POS}, or $element->{TAPE_POS}. The 
'=>' should be a '=', since you are doing an assigment.

>     }
>     else
>     {
>         $array[$i]->STATUS = "FAILED" ;

Again, this should be either $array[$i]->{STATUS} or $element->{STATUS}

>         ...
>     }
> 
> }

One last note: if you are not sure about how/if your (complex) 
datastructures are filled, you can 'use Data::Dumper;' to look at them:

    use Data::Dumper;
    my $ref_to_complex_datastructure = { #whatever };
    print Dumper($ref_to_complex_datastructure);
 

-- 
felix

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to