Pedro Antonio Reche wrote:
> 
> Hi all, I using the code below that uses the Getopt::Std to process the
> arguments from the command line (init subroutine).  However, for some
> reason I do not get the  arguments from the switches. If anyone sees
> what is the mistake I will be happy to hear about it.
> 
> #!/usr/sbin/perl -w

use strict;

> use Getopt::Std;
> 
> &init;

perldoc -q "What's the difference between calling a function as &foo and foo()"

Found in /usr/lib/perl5/5.6.0/pod/perlfaq7.pod
       What's the difference between calling a function as &foo
       and foo()?


> open(F, "$FILE") || die  "I could not open $FILE\n";
          ^     ^
perldoc -q quoting

Found in /usr/lib/perl5/5.6.0/pod/perlfaq4.pod
       What's wrong with always quoting "$vars"?

You should include the $! variable in the error message so you know why open failed.


> while(<F>){
>         if (! /ATOM/) {
>                 print $_;
>         }
>         else{
>                 if ( substr($_, $21,1) =~ $A ){
                                  ^      ^^
That dollar sign shouldn't be there.  You want to use 'eq' instead of '=~' to compare 
strings.


>                         substr ($_, $21, 1, $B);
>                         print $_;
>                 }
>                 else{
>                         print $_;
>                 }
>         }

You _always_ "print $_;" so why is used three times?

    substr $_, 21, 1, $B if /ATOM/ and substr $_, 21, 1 eq $A;
    print;


> }
> close(F);
> 
> sub usage {
>     my $program = `basename $0`;

use File::Basename;

      my $program = basename( $0 );


>     chop($program);

Why are you removing the last character from $program?


>     print STDERR "
>       $program [-p pdb ] [-a <chain_to_rename> ] [-b <new_chain_name>] [
> -h ]
> 
>       Rename chain id from pdb
> 
>       -p         : pdb file
>       -a         : chain to rename
>       -b         : new chain name
> 
> 
> ";
> 
> }
> sub init {
>     getopts('pab');

perldoc Getopt::Std

SYNOPSIS
           use Getopt::Std;

           getopt('oDI');    # -o, -D & -I take arg.  Sets opt_* as a side effect.
                               ^^^^^^^^^^^^^^^^^^^^
           getopt('oDI', \%opts);    # -o, -D & -I take arg.  Values in %opts
                                       ^^^^^^^^^^^^^^^^^^^^
           getopts('oif:');  # -o & -i are boolean flags, -f takes an argument
                                                          ^^^^^^^^^^^^^^^^^^^^
                             # Sets opt_* as a side effect.
           getopts('oif:', \%opts);  # options as above. Values in %opts



>     if ($opt_p) {
>         $FILE = $opt_p;
>         print "$FILE\n";
>     } else {
>         &usage;
>         exit;
>     }
>     if ($opt_a) {
>         $A = $opt_a;
>         chomp($A);

Unless your shell or the user is doing something really weird there is no way that a 
command
line option will have a terminating newline.


>     }
>     else {
>         &usage;
>         exit;
>     }
>     if ($opt_b) {
>         $B = $opt_b;
>         chomp($B);
>     }
>     else {
>         &usage;
>         exit;
>     }
> }

Why not just use $opt_p, $opt_a and $opt_b in the program?



John
-- 
use Perl;
program
fulfillment

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

Reply via email to