Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^3: Use reference for functions in functions

by Mr. Muskrat (Canon)
on Feb 26, 2013 at 18:06 UTC ( [id://1020736]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Use reference for functions in functions
in thread Use reference for functions in functions

The biggest thing to remember about prototypes is that you don't typically need them.

  • Comment on Re^3: Use reference for functions in functions

Replies are listed 'Best First'.
Re^4: Use reference for functions in functions
by T_I (Novice) on Feb 27, 2013 at 12:18 UTC

    I beg to differ. I found them very useful yesterday when I was rewriting a function from having 2 arguments to having 3. (and saving some lookups on the way) With proptotyping I was able to differentiate between both functions and have the code still functioning for my coworkers while I was optimizing the function. (and after rewrinting all function calls drop the old 2 argument sub)

    When you want to have the same function react differently based on the amount of arguments, by example while rewriting the function, it's useful. (unless you start shipping hashes/arrays and stuff like that to functions, then it gets interesting and to be honest a lot more fun)

      When you want to have the same function react differently based on the amount of arguments...

      If you were talking about C++ code, I'd understand perfectly what you were talking about: function overloading based on differing function signatures (prototypes). As you are talking about Perl code, I don't. I still imagine two functions  F with different prototypes that are differentially invoked based on differing argument lists, and that doesn't work in Perl.

      Can you give a short, standalone, runnable example of what you were doing?

        What I was doing was:

        func.pl

        sub adding ($$) { my $first=shift; my $second=shift; my $third=($first + $second); print("$first + $second = $third\n"); } sub adding ($$$) { my $first=shift; my $second=shift; my $third=shift; print("$first + $second = $third\n"); } 1;

        test.pl(v1):
        #!/usr/bin/perl use strict; require "func.pl"; my $one = 1; my $two = 2; my $answer = ( $one + $two); adding($one,$two);


        rewriting to test.pl(v2):
        #!/usr/bin/perl use strict; require "func.pl"; my $one = 1; my $two = 2; my $answer = ( $one + $two); adding($one,$two,$answer);

        But I didn't test it myself during the rewrite and removing the ($$) version. I just tried to recreate it and got the errors and unpredictable behavior. Thanks for the pointer, Next time I'll just rewrite with an optional 3rd option in the original function and solve my rewrites that way.

        Seems I have a lot to refresh after 3 years of not coding.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (2)
As of 2024-04-25 20:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found