Top Banner
Our local state, my, my
22

perl variable scope

Dec 21, 2015

Download

Documents

Help to understand variable scoping concept in perl
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: perl variable scope

Our local state, my, my

Page 2: perl variable scope

Your speaker for the evening

● Sawyer X● Github.com/xsawyerx● Blogs.perl.org/users/sawyer_x● #dancer @ irc.perl.org

Page 3: perl variable scope

Our local state, my, my

Page 4: perl variable scope

our, local, state, my, my

Page 5: perl variable scope

Perl variables, the easy part

● our is global● my is lexical

Page 6: perl variable scope

Easy part done!

Page 7: perl variable scope

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)

Page 8: perl variable scope

Global variables, examples

● our $name; # $main::name

● package My::Package;

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

● say $Moose::VERSION;

Page 9: perl variable scope

Globals: done!

Page 10: perl variable scope

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)

Page 11: perl variable scope

Lexical variables, examples

● { my $exists_only_here }● { my $outer; { my $inner } }● foreach my $name (@names) {

say $name; # okay

}

say $name; # error

Page 12: perl variable scope

Lexical variables, pop quiz!

package Example;

my $exvar = 30;

package main;

say $exvar;

● Error or no error?

Page 13: perl variable scope

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; }

Page 14: perl variable scope

Lexicals: done!

Page 15: perl variable scope

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;

Page 16: perl variable scope

States: Done!

Page 17: perl variable scope

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

Page 18: perl variable scope

Local variables, examples

● Slurping file content:

use autodie;

open my $fh, '<', $filename;

my $content = do { local $/; <$fh> };

close $fh;

Page 19: perl variable scope

Local variables, examples

● No output buffering for this scope:

local $| = 1;● Disabling warnings for a scope:

{

local $^W = 0;

# do something that would warn

}

Page 20: perl variable scope

Locals: done!

Page 21: perl variable scope

Questions?

Page 22: perl variable scope

Thank you!(yes, you can finally go home)