Hacker News new | past | comments | ask | show | jobs | submit login

>99.99% of the example code

Orelly's Perl books from the CD bookshelf still work.

Just declare a variable with "my =" in front of it (just once), and everything will work as usual:

old:

    $num = 3;
    print $num;
new:

    my $num = 3;
    print $num;



It works without "my" too :)

$ perl

    $num = 3;

    print $num;
3

(perl v5.32.1, without "use strict" of course)


Ah,TIL.

As I always used

use strict; use warnings;

as something like muscle memory, I didn't know this.


One of the things that `use strict` does is enable `use strict "vars"`.

    use strict;

    no strict qw(vars);
    $foo = $bar;
That's part of the reason `use strict` is recommended.

---

The other major reason is `"refs"`, which disable symbolic refs. Honestly this is *THE* main reason I recommend `use strict`.

Symbolic refs are how you did arrays of arrays prior to Perl5. (Among other uses.)

    use 4.0;

    @a = 'b','c';
    @b = (1, 2);
    @c = (3, 4);

    print $a[1]->[1], "\n"; # 4
That can be a security risk if an attacker can insert or change strings in `@a`.

It isn't (generally) needed anymore of course.

    use 5.0;
    my @a = ( \[1,2], \[3,4] );

    print $a[1]->[1], "\n"; # 4
(The only reason `@b` and `@c` existed was to symbolically reference them.)




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: