in reply to Re: Modifying passed-in variables
in thread Modifying passed-in variables

Thanks for the relies.

Rolf: The code I posted (more or less) is being used in some sample code I'm looking at. Is that an old Perl construct - i.e., no longer valid?

Ron: I did try with "strict" and "warnings" on. And I got a more verbose message, but to this noob, it wasn't more informative. LOL

tonto: Close, yes; I forgot to include (apologies) the function call in the post, however I still wanted the intended functionality of the $$data++ (double "dollar sign") statement (IOW, modifying the value of $data as the calling function would see it). That's the whole point of my post. Thanks again for your time.

Replies are listed 'Best First'.
Re^3: Modifying passed-in variables
by Preceptor (Deacon) on Nov 03, 2015 at 14:49 UTC

    I'm prepared to bet the error you got was: Can't use string ("3") as a SCALAR ref while "strict refs". This is one reason why your function isn't very friendly.

    What your function is doing is _expecting_ a reference, then modifying the value referenced. So you can call it by:

    foo ( \$data );
    Which is passing in a reference, that then "foo" alters. Because otherwise what you're doing is: ${'3'}++ which doesn't make a lot of sense.

    Action at a distance like that is generally considered bad form - you don't know what what the subroutine "foo" is doing to your local variable. So normally, what you would expect to pass in a value, and get back a result.

    You should probably note - you _do_ get a result back from your subroutine, that's the initial (pre-increment) value of $data. That can be confusing

Re^3: Modifying passed-in variables
by AnomalousMonk (Archbishop) on Nov 03, 2015 at 17:56 UTC

    Here are some guesses at what the proprietary code you have may resemble (more or less). Two have been discussed,  bar() is new. All are valid constructs in the sense that they are not deprecated as of 5.14. Whether they are good ideas or not is another question. Please pick one of these as the closest to what you have:

    c:\@Work\Perl>perl -wMstrict -le "print qq{perl version $]}; ;; sub foo { my ($data) = @_; $$data++; } ;; my $x = 3; foo(\$x); print $x; ;; sub bar (\$) { my ($data) = @_; $$data++; } bar($x); print $x; ;; sub bof { $_[0]++; } bof($x); print $x; " perl version 5.008009 4 5 6


    Give a man a fish:  <%-{-{-{-<