Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Re: Detecting constant arguments passed to subroutines

by dcd (Scribe)
on May 17, 2001 at 10:32 UTC ( [id://81176]=note: print w/replies, xml ) Need Help??


in reply to Re: Detecting constant arguments passed to subroutines
in thread Detecting constant arguments passed to subroutines

After more research I found a function that I was looking for
sub is_const {use B;B::SVf_READONLY & B::svref_2object(\$_[0])->FLAGS} my $m="va"; our $n=3; my $u=undef; our $u2=undef; for $x ($m, $n, $u, $u2, 4, "a", undef) { print "$x ";$x="VAR" unless is_const($x); print $x,"\n\n" }
but it too doesn't catch undef being passed it. For what I'm doing now, I don't think I'll encounter this condition. I think that japhy's is_const is 'better' than the flags code that I came across - at least it's easier to read.

What do you think?

Replies are listed 'Best First'.
Re: Detecting constant arguments passed to subroutines
by dcd (Scribe) on May 29, 2001 at 10:30 UTC
    I just found the real functions I was looking for readonly in Scalar::Util. I haven't figured out yet why calling it indirectly via the is_const function doesn't detect that undef is a constant, as perl dies with an error when trying to modify the undef constant, but at least the readonly is easier to read and comprehend. If anyone can explain the undetect undef constant in is_const I'd be greatful.
    use Scalar::Util 'readonly'; sub is_const { readonly($_[0]); } print "undef is readonly\n" if readonly(undef); print "undef not detected in is_const\n" unless is_const(undef); for $x (4, "a", undef) { print "$x ";$x="VAR" unless readonly($x); print $x,"\n"; } for $x (4, "a", undef) { print "$x ";$x="VAR" unless is_const($x); print $x,"\n"; }
      It is a difference between:
      sub is_const { readonly($_[0]); }
      sub is_const { readonly(@_); }
      sub is_const { readonly($_); }
      
      --
      Lubomir Host 'rajo'
      http://rajo.platon.sk

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2024-04-25 16:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found