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]