6 ms·
> [Perl] has a magic argument, $_, which means something like, "the return value of the previous call". What?!
by tripa 11y ago
> [Perl] has a magic argument, $_, which means something like, "the return value of the previous call".
What?!
- Mithaldu 11y agoI don't know whether you recognize this as wrong, or are surprised at the thought of such a thing (which doesn't actually exist like that). In any case, i've suggested a correction here: http://blog.jenkster.com/2015/12/which-programming-languages-are-functional.html#comment-2432154798 http://blog.jenkster.com/2015/12/which-programming-languages...
- tripa 11y agoI recognize this as wrong, and am surprised by how he could have gotten that idea. Good job with the correction.
- jerf 11y agoWell, try to explain $_ in a short sentence without being wrong. "It's the perl equivalent of the pronoun 'it'." OK, now try explaining it in proper engineering terms that describes exactly what it is, how to use it, and in some sense, how to implement it, in about that many words. At the very least, I suspect honesty will compel you to admit that either A: that took you longer than you expected or B: you left out a lot of corner cases, especially when modifying $_ does or does not change the thing it does or does not reference, and how it interacts with local, and, and, and....
- dozzie 11y agoHere you go: default variable to pass string argument to many built-in functions and operators, which typically return their result in the same variable. Yes, it took a little longer. No, it didn't took that much longer to leave out plainly invalid and misleading description. No, I didn't need to put corner cases there, exactly the same way as you wouldn't specify corner cases for Yacc to describe what it does.
- Mithaldu 11y agoI did in the linked comment in roughly the same space as the original description. The only thing that could maybe have been included is the scope restriction afforded by local, but that's a feature available to all variables and not necessary to mention. I also did not take longer than expected, nor did i leave out any corner cases that affect day-to-day work and am not aware of many of them existing in the first palce.
- tripa 11y agoOk. $_ isn't trivial to understand, let alone explain. But nobody's claiming that. Well not me at least. What irked me is that's just about all the author's got to say about Perl in the article. Other languages inherited this "feature" (Ruby anyone?) or equivalents, but no mention of that. Why even mention Perl if he's got nothing (solid) to say about it?
- __david__ 11y ago$_ isn't really global though: perl -e 'for (1,2,3,4) { for (5,6) { print " $_\n" } print "$_\n" }'
- Mithaldu 11y agoIt may look like it is not in loop constructs, but it is. `for` and friends just apply `local` scoping to `$_` internally.
- typon 11y agoOh lord... I envy your innocence. This isn't even the whole story. There are like ten more of these (good luck remember which one does what). They are all something like $., $/, $" etc. and they're all global.
- deleted 11y ago[deleted]
- Mithaldu 11y agoThey're all documented and explained in https://metacpan.org/pod/distribution/perl/pod/perlvar.pod https://metacpan.org/pod/distribution/perl/pod/perlvar.pod and all have english names available and all but a small hand-full only exist for backwards compatibility at this point.
- typon 11y agoI would never use them in my code. The problem is when I'm debugging 5 year old code it becomes such a headache.
- arethuza 11y agoI thought that the point of $_ was that you don't reference it directly in your code?
- Mithaldu 11y agoIt is! But sometimes you end up using it to make code more reliable, as in: do_thing($_) for @things; Where $_ is passed in as an argument, as opposed to: do_thing for @things; Where $_ is (due to its global nature) set by `for`, and read in sub do_thing { ... }
- Mithaldu 11y ago> I would never use them in my code. Most people don't. The only one that is used a lot is @_. :) As for debugging old code, that's why i pointed out perlvar. It's never far and it's always easy to look up what a specific var does.