Our local state, my, my
Your speaker for the evening
● Sawyer X
● Github.com/xsawyerx


● Blogs.perl.org/users/sawyer_x


● #dancer @ irc.perl.org
Our local state, my, my
our, local, state, my, my
Perl variables, the easy part
● our is global
● my is lexical
Easy part done!
What's a global variable?
● Perl code is divided to namespaces
● We use 'package' to declare them


● 'main' is the default namespace


● Globals are package variables


● Variables relating to that namespace


● (not the same as “superglobals”)


● (globals are saved in typeglobs)
Global variables, examples
●   our $name; # $main::name

●   package My::Package;
    our $name; # $My::Package::name

●   say $Moose::VERSION;
Globals: done!
What's a lexical variable?
● Scoped variables
● Variables that exist only in a scope!


● Available scopes: block, file, eval


● We define lexical variables with 'my'


● (they are saved in a lex pad)
Lexical variables, examples
● { my $exists_only_here }
● { my $outer; { my $inner } }


● foreach my $name (@names) {


     say $name; # okay
  }
  say $name; # error
Lexical variables, pop quiz!

    package Example;
    my $exvar = 30;

    package main;
    say $exvar;

●   Error or no error?
Lexical variables, pop quiz!
● No error!
● my is lexical


● package is a namespace, not a scope


● The scope here is the “file scope”


● Here is the correct way to do it:


  { package Example; my $exvar; }
Lexicals: done!
What's a state variable?
● Lexical variables with a twist!
● They don't get reinitialized


● sub inc {


    state $myvar = 0; # default value
    return ++$myvar;
  }
  say inc($_) for 1 .. 10;
States: Done!
What's a local variable?
● Something that confuses people
● But very simple, actually


● Localizes an already existing variable


● Used to temporarily override

  variables instead of creating new ones
● Useful with superglobals


● Prevents fscking them up
Local variables, examples
●   Slurping file content:

    use autodie;
    open my $fh, '<', $filename;
    my $content = do { local $/; <$fh> };
    close $fh;
Local variables, examples
● No output buffering for this scope:
  local $| = 1;
● Disabling warnings for a scope:


  {
     local $^W = 0;
     # do something that would warn
  }
Locals: done!
Questions?
Thank you!
(yes, you can finally go home)

Our local state, my, my - Understanding Perl variables

  • 1.
  • 2.
    Your speaker forthe evening ● Sawyer X ● Github.com/xsawyerx ● Blogs.perl.org/users/sawyer_x ● #dancer @ irc.perl.org
  • 3.
  • 4.
  • 5.
    Perl variables, theeasy part ● our is global ● my is lexical
  • 6.
  • 7.
    What's a globalvariable? ● Perl code is divided to namespaces ● We use 'package' to declare them ● 'main' is the default namespace ● Globals are package variables ● Variables relating to that namespace ● (not the same as “superglobals”) ● (globals are saved in typeglobs)
  • 8.
    Global variables, examples ● our $name; # $main::name ● package My::Package; our $name; # $My::Package::name ● say $Moose::VERSION;
  • 9.
  • 10.
    What's a lexicalvariable? ● Scoped variables ● Variables that exist only in a scope! ● Available scopes: block, file, eval ● We define lexical variables with 'my' ● (they are saved in a lex pad)
  • 11.
    Lexical variables, examples ●{ my $exists_only_here } ● { my $outer; { my $inner } } ● foreach my $name (@names) { say $name; # okay } say $name; # error
  • 12.
    Lexical variables, popquiz! package Example; my $exvar = 30; package main; say $exvar; ● Error or no error?
  • 13.
    Lexical variables, popquiz! ● No error! ● my is lexical ● package is a namespace, not a scope ● The scope here is the “file scope” ● Here is the correct way to do it: { package Example; my $exvar; }
  • 14.
  • 15.
    What's a statevariable? ● Lexical variables with a twist! ● They don't get reinitialized ● sub inc { state $myvar = 0; # default value return ++$myvar; } say inc($_) for 1 .. 10;
  • 16.
  • 17.
    What's a localvariable? ● Something that confuses people ● But very simple, actually ● Localizes an already existing variable ● Used to temporarily override variables instead of creating new ones ● Useful with superglobals ● Prevents fscking them up
  • 18.
    Local variables, examples ● Slurping file content: use autodie; open my $fh, '<', $filename; my $content = do { local $/; <$fh> }; close $fh;
  • 19.
    Local variables, examples ●No output buffering for this scope: local $| = 1; ● Disabling warnings for a scope: { local $^W = 0; # do something that would warn }
  • 20.
  • 21.
  • 22.
    Thank you! (yes, youcan finally go home)