Maxim,
Correction:
The "use strict;" requires the arguments to all be quoted.  In the real script I am 
only using
"use strict 'vars';".  This way I can keep the syntax of calling the sub the same as I 
originally
had.  I would like to keep the "error_notify(e,p,x,"Message");" syntax.  The "q" is 
the only
character that is causing me problems with this.

-Michael McQuarrie

--- Michael McQuarrie <[EMAIL PROTECTED]> wrote:
> Maxim,
> I have set "use strict;".
> 
> Below is a script to test the sub.  As is the script should simply print "the script 
>didnt
> work".
> If you change the last line of the following test script to:
>     error_notify(q,"the script didnt work");
> It fails with this message:
>     Can't find string terminator "," anywhere before EOF at test2 line 77.
> 
> If you change the "q" (when calling the sub) to any other letter it does what it is 
>supposed to.
> 
> #!/usr/bin/perl
> 
> use strict;
> 
> my $MAIL_LIST = "[EMAIL PROTECTED]";
> my $PAGE_LIST = "[EMAIL PROTECTED]";
> 
> my $PROC_NAME = "err test";
> my $HOST_NAME = "mybox";
> my $STEP_NAME = "Test Error Notify";
> 
> sub error_notify
> {
>   my $ERR_USAGE = "error_notify (e,p,x, \"Message Text\")\n";
>   my $ERR_DATE_TIME = `date`;
>   chomp ($ERR_DATE_TIME);
>   my $DEFAULT_MESSAGE = "Undefined Error!";
>   my (@ERR_OPTS, $MESSAGE);
> 
> 
>   foreach (@_)
>   {
>     if    (/^e$/)  { push @ERR_OPTS, "email";                         }
>     elsif (/^p$/)  { push @ERR_OPTS, "page";                          }
>     elsif (/^x$/)  { push @ERR_OPTS, "exit";                          }
>     elsif (/^\w$/) { print "Invalid error_notify Option\n$ERR_USAGE";    }
>     else           { $MESSAGE = $_; }
>   }
> 
>   unless (defined $MESSAGE) { $MESSAGE = $DEFAULT_MESSAGE };
>   print "\n\nError: $MESSAGE\n\n";
> 
>   foreach (@ERR_OPTS)
>   { if    ( /^email$/ )
>     { if ( defined $MAIL_LIST )
>       { open MAIL, "| mail -s \"$HOST_NAME $PROC_NAME Script Error\" $MAIL_LIST" or 
>warn "Unable
> to open mail.\n";
>         #------------------------------------------
>         print MAIL << "        EOM";
> Host  Name : $HOST_NAME
> Proc Title : $PROC_NAME
> Script Name: $0
> Date / Time: $ERR_DATE_TIME
> Step Name  : $STEP_NAME
> Err Message: $MESSAGE
> User  ID   : $>
> Proc Number: $$
>         EOM
>         #------------------------------------------
>         close (MAIL);
>         print "Sending Mail To:\n$MAIL_LIST\n\n";
>       }
>       else
>       { print "No mailing list defined.\nNo mail sent.\n"; }
>     }
> 
>     elsif ( /^page$/  )
>     { if ( defined $PAGE_LIST )
>       { open PAGE, "| mail -s \"$HOST_NAME $PROC_NAME Error\" $PAGE_LIST" or warn 
>"Unable to
> open
> mail.\n";
>         #------------------------------------------
>         print PAGE << "        EOP";
> $ERR_DATE_TIME
>         EOP
>         #------------------------------------------
>         close (PAGE);
>         print "Sending Page To:\n$PAGE_LIST\n\n";
>       }
>       else
>       { print "No paging list defined.\nNo page sent.\n"; }
>     }
> 
>     elsif ( /^exit$/  )
>     { print "exit\n";
>       exit 1;           }
>   }
> }
> 
> error_notify("the script didnt work");
> 
> # End of Script
> 
> --- Maxim Berlin <[EMAIL PROTECTED]> wrote:
> > Hello Michael,
> > 
> > Wednesday, December 05, 2001, Michael McQuarrie <[EMAIL PROTECTED]> wrote:
> > 
> > 
> > MM> I am defining a sub that takes only specific options:
> > 
> > MM> sub error_notify
> > MM> {
> > MM>   my $ERR_USAGE = "error_notify (e,p,x, \"Message Text\")\n";
> > 
> > MM>   foreach (@_)
> > MM>   {
> > MM>     if    (/^e$/)  { push @ERR_OPTS, "email";                         }
> > MM>     elsif (/^p$/)  { push @ERR_OPTS, "page";                          }
> > MM>     elsif (/^x$/)  { push @ERR_OPTS, "exit";                          }
> > MM>     elsif (/^\w$/) { print "Invalid error_notify Option\n$ERR_USAGE";    }
> > MM>     else           { $MESSAGE = $_; }
> > MM>   }
> > MM>   bla bla bla...
> > 
> > MM> This sub is supposed to be called like this:
> > MM> error_notify(e,p,x,"This is the error message that will be sent out");
> > bad syntax. you should use ' or " for character variables.
> > 'e','p','x'
> > 
> > MM> The  problem  that  I  am running into is that whenever "q" (which
> > MM> isn't  a  valid option) is supplied as an argument to the sub like
> > MM> this:
> > MM> error_notify(q,"Whatever");
> > normally, you can not use this syntax. you should get
> > "Can't find string terminator "," anywhere before EOF"
> > error from perl. use
> > error_notify("q","Whatever");
> > MM> I get an error because the "q" is interpreted as a quote operator.
> > MM> I  am  using a \w to try and match all invalid options but \w will
> > MM> not  match  the  q. Anyone know a way around this? I would like to
> > MM> keep the same syntax for calling the sub.
> > i suggest you to put
> > use strict;
> > line at the top of your source and run
> > perl -c yoursource
> > to check syntax.
> > 
> > Best wishes,
> >  Maxim                            mailto:[EMAIL PROTECTED]
> > 
> > 
> > 
> > -- 
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Buy the perfect holiday gifts at Yahoo! Shopping.
> http://shopping.yahoo.com
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


__________________________________________________
Do You Yahoo!?
Buy the perfect holiday gifts at Yahoo! Shopping.
http://shopping.yahoo.com

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

Reply via email to