Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: How to modify a warning message within a sub?

by shmem (Canon)
on Aug 09, 2011 at 02:45 UTC ( #919364=note: print w/ replies, xml ) Need Help??


in reply to How to modify a warning message within a sub?

I read about installing a __WARN__ signal handler, but that appears to require exposing $arrayRef to a wider scope.

No. Did you try? The trick is to install a local $SIG{__WARN__}:

sub compareLT105 { my $arrayRef = shift; { # bare block to narrow scope of local() local $SIG{__WARN__} = sub { chomp( my $msg = $_[0] ); print STDERR $msg," \$arrayRef = [qw(@{$arrayRef})]\n"; }; return 'true' if $arrayRef->[1] < 105; } return 'false'; } For 100 compareLT105 says: true For 106 compareLT105 says: false Argument "100A" isn't numeric in numeric lt (<) at warn.pl line 27. $a +rrayRef = [qw(3 100A)] For 100A compareLT105 says: true Argument "100B2" isn't numeric in numeric lt (<) at warn.pl line 27. $ +arrayRef = [qw(4 100B2)] For 100B2 compareLT105 says: true


Comment on Re: How to modify a warning message within a sub?
Select or Download Code
Replies are listed 'Best First'.
Re^2: How to modify a warning message within a sub?
by Marshall (Prior) on Aug 09, 2011 at 03:53 UTC
    THANKS!, I worked some more...this works..
    The good thing is that $arrayRef->[1] works without having $arrayRef having more scope than within the sub{}.

    #!/usr/bin/perl -w use strict; $|=1; #turns off buffering for STDOUT my @x = ( [1,'100'], [2,'106'], [3,'100A'], [4,'100B2'], ); foreach my $ref (@x) { print "For $ref->[1] compareLT105 says: ", compareLT105($ref),"\n"; } sub compareLT105 { my $arrayRef = shift; local $SIG{__WARN__} = sub { my $msg = shift; print STDERR $msg,"********"; print STDERR "error array index: ",$arrayRef->[0]; print STDERR " value is ",$arrayRef->[1], "\n"; }; return 'true' if $arrayRef->[1] < 105; return 'false'; } __END__ For 100 compareLT105 says: true For 106 compareLT105 says: false Argument "100A" isn't numeric in numeric lt (<) at C:\TEMP\warnexample +.pl line 30. ********error array index: 3 value is 100A For 100A compareLT105 says: true Argument "100B2" isn't numeric in numeric lt (<) at C:\TEMP\warnexampl +e.pl line 30. ********error array index: 4 value is 100B2 For 100B2 compareLT105 says: true

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://919364]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2015-07-28 03:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (252 votes), past polls