SlideShare a Scribd company logo
1 of 136
Download to read offline
Perl 5.10
 in 2010
Part I
The History
and some
Statistics
5.10.0
18 December 2007
Today is
5 March 2010
810 days
 passed
5.10.1
exists already
5.11.0, 5.11.1,
5.11.2, 5.11.3, 5.11.4
exist already
5.12
soon
Dutch Perl Workshop 2010

Andrew Shitov
Perl 5.10 in 2010

Leon Timmermans
What's new in Perl 5.12?

Martin Berends
Perl 6 implementations in March 2010

Jonathan Worthington
Solved in Perl 6
Total on CPAN
 ~80 000 modules
Total on CPAN
~20 000 distributions
Total on CPAN
 ~8000 authors
Are Perl 5.10
features used
 frequently?
?
~ 200 modules
~ 100 authors
Part II
Perl 5.10 Features
say
   say
$x
     ==
print
"$xn"
~~
$a
~~
/d/
$a
~~
@list
@list
~~
%hash
switch
given($x)
{




when(/a/)
{...}




when('b')
{...}




default


{...}
}
state
sub
counter
{




state
$c
=
0;




return
++$c;
}
regexes
(?<name>)   %+
K          %‐
R          g<name>
//
 $city
=
$arg
//
'Moscow';

$vacancy{city}
//=
'Moscow';
Part III
Ontology
How to enable
use
5.010000;
use
5.01001;
use
5.010;
use
5.010_000;
use
5.10.0;
use
v5.10.0;
use
v5.10;
use
feature
':5.10';
5.10.0
         v5.10.0
         v5.10

vector string
version string

abbreviated — v-string
5.10.0
         v5.10.0
         v5.10

vector string
version string

abbreviated — v-string
say for debugging
given
($action)
{




when
(/^include_cmd:/)
{








my
$cmd
=
$child‐>content;








$cmd
=~
/^include_cmd:(s*)/;








my
$ws
=
$1
||
'';








$cmd
=~
s/^include_cmd:s*//;








#say("cmd:$ws$cmd");








$cmd
=
cwd()
.
'/'
.
$cmd;








@output
=
qx($cmd);








$child‐>content($ws
.
join($ws,
@output));




}


 Pod::Elemental::Transformer::Include
— 08 Jan 2010
 include output via files and commands
// and //=
for default values
$port
//=

5432;
$host
//=
'localhost';

$col

//=
'';




Pg::Loader — 07 Jul 2008
Perl extension for loading Postgres tables
$attrz{
maxjob

}
//=
1;
$value
//=
1;

$attrz{
$_
}
//=
0;
$attrz{
verbose
}
//=
'';
$attrz{
debug


}
//=
'';
$val
//=
1;
$exit
//=
0;
$skipz‐>{
$job_id
}
//=
'Skip
on
SIGHUP'




Parallel::Depend — 12 Aug 2009
Parallel-dependent dispatch of perl or shell code
sub
import


{




shift;




my
%args
=
@_;




#
we
do
not
care
about
autoviv




$^H{fixedtime}
=
$args{epoch_offset}
//






















CORE::time;
}




fixedtime — 14 Aug 2008
lexical pragma to fix the epoch offset for time related functions
say
$answer
//





"I
don't
know
enough
to
answer
you
yet.";




Hailo — 29 Jan 2010
A pluggable Markov engine analogous to MegaHAL
my
$marpa_version

=





$Parse::Marpa::VERSION
//
'undef';
my
$source_version
=





$Parse::Marpa::Source::VERSION
//
'undef';

$options
//=
{};




Parse::Marpa — 14 Dec 2008
Generate Parsers from any BNF grammar
my
$nulling_symbol
=


$rhs_symbol‐>[Parse::Marpa::Internal::Symbol::NULL_ALIAS]
//
$rhs_symbol;

$action
//=
$default_action;

say
{$trace_fh}




'Problems
compiling
action
for
original
rule:
',




Parse::Marpa::brief_original_rule($rule);

my
$clone
=
$clone_arg
//
1;
my
$current_parse_set
=
$parse_set_arg
//
$default_parse_set;

$choice
//=
0;

$lines
//=
[0];
$source_options
//=
{};




 Parse::Marpa::Internal::Evaluator
— 14 Dec 2008
 Generate Parsers from any BNF grammar
my
$trace_fh
=
$arg_trace_fh
//
(*STDERR);

my
$trace_fh
=
shift;
$trace_fh
//=
*STDERR;




Parse::Marpa::Recognizer
— 14 Dec 2008
Generate Parsers from any BNF grammar
// inside return
return
$self‐>_get_infection(
$disease‐>id
)
//
0;

my
$val
=
$self‐>_get($key)
//
$default‐>{$key};



return
@{
$self‐>_players
//
[]
};




Games::Pandemic::City,
Games::Pandemic::Config
— 07 Sep 2009
Games::Risk
— 18 Oct 2008
sub
homedir
{


my
($self)
=
@_;


require
File::HomeDir;


return
File::HomeDir‐>my_home




//
croak
'File::HomeDir
says
you
have
no
home














directory';
}




App::RSS2Leafnode
— 02 Feb 2010
post RSS feeds to newsgroups
sub
config_filename
{


my
($self)
=
@_;


return
$self‐>{'config_filename'}
//
do
{




require
File::Spec;




File::Spec‐>catfile









($self‐>homedir,
'.rss2leafnode.conf');


};
}




App::RSS2Leafnode
— 02 Feb 2010
post RSS feeds to newsgroups
return




isodate_to_rfc822($date
//
$self‐>{'now822'});

return
URI::Title::title




({
url

=>
($resp‐>request‐>uri
//
''),







data
=>
$resp‐>decoded_content








(charset
=>
'none')});




App::RSS2Leafnode
— 02 Feb 2010
post RSS feeds to newsgroups
return
inside //
my
$b_time
=
$self‐>item_to_timet($b_item)



//
return
$a_item;

my
$a_time
=
$self‐>item_to_timet($a_item)




//
return
$b_item;;

my
$str
=
$self‐>item_to_date($item)




//
return;




App::RSS2Leafnode
— 02 Feb 2010
post RSS feeds to newsgroups
return
(elt_to_email
($item‐>first_child('author'))








//
elt_to_email
($item


‐>first_child('dc:creator'))








//
elt_to_email
($item


‐>first_child('dc:contributor'))








//
non_empty
($item‐>first_child_text('wiki:username'))









//
elt_to_email
($channel‐>first_child('dc:creator'))








//
elt_to_email
($channel‐>first_child('author'))








//
elt_to_email
($channel‐>first_child('managingEditor'))








//
elt_to_email
($channel‐>first_child('webMaster'))









//
elt_to_email
($item


‐>first_child('dc:publisher'))








//
elt_to_email
($channel‐>first_child('dc:publisher'))









//
non_empty
($channel‐>first_child_text('title'))









#
RFC822








//
'nobody@'.$self‐>uri_to_host







);


App::RSS2Leafnode
— 02 Feb 2010
post RSS feeds to newsgroups
sub
item_to_language
{


my
($self,
$item)
=
@_;


my
$content;


my
$ret
=
(elt_to_language($item)













//
elt_to_language($item‐>first_child('content')));


for
(;;)
{




$item
=
$item‐>parent
//
last;




$ret
//=
elt_to_language($item);


}


$ret
//=
$self‐>{'resp'}‐>content_language;


return
$ret;
}




App::RSS2Leafnode
— 02 Feb 2010
post RSS feeds to newsgroups
Chained
//



my
$captures



=
$arg
{captures}






//
[];



my
$comment




=
escape
$arg
{comment}
//
$name
//
"";



my
$upgrade




=
$arg
{utf8_upgrade}


//
1;



my
$downgrade


=
$arg
{utf8_downgrade}
//
1;



my
$match






=
$arg
{match}









//
1;




  Games::Wumpus
— 24 Nov 2009
  Play Hunt the Wumpus
when with a scalar




while
(my
($key,
$value)
=
each
%arg)
{








given
($key)
{












when
("tests")
{
















$Test
‐>
plan
($value);












}












when
("import")
{
















$self
‐>
export_to_level
(1,
$self,
$_)
for
@{$value
||
[]};












}












default
{
















die
"Unknown
option
'$key'n";












}








}




}




   Test::Regexp
— 09 Dec 2009
   Test your regular expressions




foreach
(@hazards)
{








when
($WUMPUS)
{












$self
‐>
lose;












push
@messages
=>
"Oops!
Bumped
into
a
Wumpus!";








}








when
($PIT)
{












$self
‐>
lose;












push
@messages
=>
"YYYIIIIEEEE!
Fell
in
a
pit!";








}








when
($BAT)
{












push
@messages
=>



















"ZAP!
Super
bat
snatch!
Elsewhereville
for
you!";








}




}




   Games::Wumpus
— 24 Nov 2009
   Play Hunt the Wumpus
when for selection
given
($k)
{




when
('file')



{
$opt_file




=
$v;
}




when
('argv')



{
$opt_argv




=
$v;
}




when
('inter')


{
$opt_interact
=
$v;
}




when
('prompt')

{
$opt_prompt


=
$v;
}




when
('quiet')


{
$opt_quiet



=
$v;
}




when
('tty_in')

{
$tty_in






=
$v;
}




when
('tty_out')
{
$tty_out





=
$v;
}




default
{








die
"Error:
in
subroutine
set_opt(),
found
invalid
key
{$k
=>
'$v'}













(not
'file',
'argv',
'inter',
'prompt',
'quiet',













'tty_in'
or
'tty_out')";




}
}




Term::DBPrompt
— 18 Dec 2009
Commandline prompt for a database application
given
($inp_typ)




when
('f')
.
.
.




when
('a')
.
.
.




when
('i')
.
.
.




default
{








die
"Internal
error:
type
=
'$inp_typ'
(not
'f',
'a'
or
'i')";




}
}




Term::DBPrompt
— 18 Dec 2009
Commandline prompt for a database application
when
with a boolean value
unless
(
'itan'
~~
@list
)
{




given
(
length
$password
)
{








when
(
16
)
{












#
ok








}








when
(
$_
<
4
)
{












die('ERROR:
Password
is
too
short
(Min
4
bytes
required)');








}








when
(
$_
>
16
)
{












die('ERROR:
Password
is
too
long
(Max
16
bytes
allowed)');








}








default
{












while
(1)
{
















$password
.=
'0';
















last





















if
length
$password
==
16;












}








}




}

App::iTan::Utils
— 26 Oct 2009
Secure management of iTans for online banking
unless
(
'itan'
~~
@list
)
{




given
(
length
$password
)
{








when
(
16
)
{












#
ok








}








when
(
$_
<
4
)
{












die('ERROR:
Password
is
too
short
(Min
4
bytes
required)');








}








when
(
$_
>
16
)
{












die('ERROR:
Password
is
too
long
(Max
16
bytes
allowed)');








}








default
{












while
(1)
{
















$password
.=
'0';
















last





















if
length
$password
==
16;












}








}




}

App::iTan::Utils
— 26 Oct 2009
Secure management of iTans for online banking
when
with regular expressions
sub
range2list
{

 my
$_
=
shift;

 given
($_)
{

 
 when
(/^(d)‐(d)$/o
)


{
return
"$1..$2"
}

 
 when
(/^d..d$/o
)




{
return
"$_"
}

 
 when
(/^d$/o
)










{
return
$_}

 
 when
(/^(.*?),(.*)$/o
)


{
return
range2list($1).
','








































.range2list($2)}

 
 default


















{
return
''}

 }
}




Catalyst::Devel
when and ref




given(ref
$fdef){








when('ARRAY'){




Package::FromData
— 14 Jan 2008
generate a package with methods and variables from a data structure
when and undef
given
($1)
{




when
(undef)

{return}




when
($left)

{
$depth++;
}




when
($right)
{
$depth‐‐;
}
}




Parse::Marpa::Lex
given
($action)
{




when
(undef)
{;}



#
do
nothing
























#
Right
now
do
nothing

























#
but
find
lex_q_quote




when
('lex_q_quote')
{








$lexers[$ix]
=












[
&Parse::Marpa::Lex::lex_q_quote,















$prefix,
$suffix
];




}




Parse::Marpa::Recognizer
Nested given/when
given($name)
{




when
('stream:stream')
.
.
.




when
('challenge')
.
.
.




when
('failure')
.
.
.




when
('stream:features')
.
.
.









given(my
$clist
=
$node‐>getChildrenHash())
{












when
('starttls')
.
.
.












when('mechanisms')
.
.
.
















foreach($clist‐>{'mechanisms'}‐>


















[0]‐>getChildrenByTagName('*'))




















when($_‐>textContent()
eq
'DIGEST‐MD5'























or
$_‐>textContent()
eq
'PLAIN')












when('bind')
.
.
.












default
.
.
.




when
('proceed')
.
.
.




when
('success')
.
.
.




POE::Component::Jabber
— 22 Mar 2009
A POE Component for communicating over Jabber
given($name)
{




when
('stream:stream')
.
.
.




when
('challenge')
.
.
.




when
('failure')
.
.
.




when
('stream:features')
.
.
.








given(my
$clist
=
$node‐>getChildrenHash())
{












when
('starttls')
.
.
.












when('mechanisms')
.
.
.

















foreach($clist‐>{'mechanisms'}‐>


















[0]‐>getChildrenByTagName('*'))




















when($_‐>textContent()
eq
'DIGEST‐MD5'























or
$_‐>textContent()
eq
'PLAIN')












when('bind')
.
.
.












default
.
.
.




when
('proceed')
.
.
.





when
('success')
.
.
.




POE::Component::Jabber
— 22 Mar 2009
A POE Component for communicating over Jabber
for and when
for
(
catch
)
{


when
(
$_‐>isa('Getopt::Lucid::Exception::ARGV')
)
{




say;




#
usage
stuff




return
1;


}


default
{
die
$_
}
}




App::CPAN::Mini::Visit
— 07 Nov 2008
explore each distribution in a minicpan repository
~~
return
_fail(
$pkg,
$sub
)
if
$_
~~
0;



if
(
$attr
~~
/^Export_?Lexical$/i
)
{




Export::Lexical
— 09 Oct 2008
Lexically scoped subroutine imports
@exportz



=
grep
{
!
(
$_
~~
@argz
)
}
@_;



$disp
~~
@exportz









or
push
@exportz,
$disp;




Exporter::Proxy
— 29 Jan 2010
Simplified symbol export & proxy dispatch
@exportz



=
grep
{
!
(
$_
~~
@argz
)
}
@_;



$disp
~~
@exportz









or
push
@exportz,
$disp;
                                           Cool?




Exporter::Proxy
— 29 Jan 2010
Simplified symbol export & proxy dispatch
$disp
~~
@exportz









or
push
@exportz,
$disp;




push
@exportz,
$disp
unless
$disp
~~
@exportz
for(
@_
)




{








index
$_,
':'








or
next;









if(
$_
~~
@exportz
)








{












my
$source

=
qualify_to_ref
$_,
$source;












my
$install
=
qualify_to_ref
$_,
$caller;













*$install


=
*$source;








}








else








{












die
"Bogus
$source:
'$_'
not
exported";








}




}




Exporter::Proxy
— 29 Jan 2010
Simplified symbol export & proxy dispatch
for(
@_
)




{








index
$_,
':'








or
next;
                                                 Maybe when?








if(
$_
~~
@exportz
)








{












my
$source

=
qualify_to_ref
$_,
$source;












my
$install
=
qualify_to_ref
$_,
$caller;













*$install


=
*$source;








}








else








{












die
"Bogus
$source:
'$_'
not
exported";








}




}




Exporter::Proxy
— 29 Jan 2010
Simplified symbol export & proxy dispatch
48 files, and only single one
(Maplat::Helpers::CommandHelper)
 uses 5.10 feature
Maplat                                         Maplat::Web::Login
Maplat::Helpers::BuildNum                      Maplat::Web::LogoCache
Maplat::Helpers::CSVFilter                     Maplat::Web::MemCache
Maplat::Helpers::Cache::Memcached              Maplat::Web::MemCacheSim
Maplat::Helpers::Cache::Memcached::GetParser   Maplat::Web::PathRedirection
Maplat::Helpers::CommandHelper                 Maplat::Web::PostgresDB
Maplat::Helpers::DBSerialize                   Maplat::Web::SendMail
Maplat::Helpers::DateStrings                   Maplat::Web::SessionSettings
Maplat::Helpers::Logo                          Maplat::Web::StandardFields
Maplat::Helpers::MailLogger                    Maplat::Web::StaticCache
Maplat::Helpers::Mascot                        Maplat::Web::Status
Maplat::Helpers::Padding                       Maplat::Web::TemplateCache
Maplat::Helpers::Strings                       Maplat::Web::UserSettings
Maplat::Helpers::TextLogger                    Maplat::Web::VariablesADM
Maplat::Web                                    Maplat::Worker
Maplat::Web::BaseModule                        Maplat::Worker::AdminCommands
Maplat::Web::BrowserWorkarounds                Maplat::Worker::BaseModule
Maplat::Web::CommandQueue                      Maplat::Worker::Commands
Maplat::Web::Debuglog                          Maplat::Worker::DirCleaner
Maplat::Web::DirCleaner                        Maplat::Worker::MemCache
Maplat::Web::DocsSearch                        Maplat::Worker::OracleDB
Maplat::Web::DocsSpreadSheet                   Maplat::Worker::PostgresDB
Maplat::Web::DocsWordProcessor                 Maplat::Worker::Reporting
Maplat::Web::Errors                            Maplat::Worker::SendMail

Maplat
— 20 Jan 2010
The MAPLAT Web Framework
This Module is actually a stub (don't use it)
48 files, and only single one
 (Maplat::Helpers::CommandHelper)
  uses 5.10 feature




if($line‐>{id}
~~
%active)




 Maplat
— 20 Jan 2010
 The MAPLAT Web Framework
 This Module is actually a stub (don't use it)
Named capturing parens





my
$compiled_regex
=
qr{









G









(?<mArPa_prefix>$prefix)









(?<mArPa_match>$regex)









(?<mArPa_suffix>$suffix)





}xms;




 Parse::Marpa::Recognizer
Part IV
Antipatterns
use
5.010;
            use
feature
':5.10';




App::TemplateServer



$show_line
//=
1








if
$style
eq
'Regexp::Common';




  SmartMatch::Sugar
  Regexp-CharClasses
use
Switch;
 switch($stream‐>codec_type){
 
 
 
 case
"video"
{
 
 
 
 
 bless
$stream,
'Video::FFmpeg::AVStream::Video';
 
 
 
 
 push
@streams,
$stream;
 
 
 
 }
 
 
 
 case
"audio"
{
 
 
 
 
 bless
$stream,
'Video::FFmpeg::AVStream::Audio';
 
 
 
 
 push
@streams,
$stream;
 
 
 
 }
 
 
 
 case
"subtitle"
{
 
 
 
 
 bless
$stream,
'Video::FFmpeg::AVStream::Subtitle';
 
 
 
 
 push
@streams,
$stream;
 
 
 
 }
 
 
 
 else
{
 
 
 
 
 push
@streams,
$stream;
 
 
 
 }
 
 
 }

 use
if
$]
>=
5.011,
'deprecate';

Video::FFmpeg::AVFormat
my
$prefix
=
$symbol_prefix
//
$default_prefix;
$prefix
=
qr/$prefix/xms
if
defined
$prefix;

my
$suffix
=
$symbol_suffix
//
$default_suffix;
$suffix
=
qr/$suffix/xms
if
defined
$suffix;




Parse::Marpa::Recognizer
$isPermaLink
=




(lc($guid‐>att('isPermaLink')
//
'true')




eq
'true');




App::RSS2Leafnode
— 02 Feb 2010
post RSS feeds to newsgroups
$isPermaLink
=




(lc($guid‐>att('isPermaLink')
//
'true')




eq
'true');



say
'False'
if
length($bool_value)
==
5;
given
(
$params[0]
//
''
)
{




when
(blessed
$_
&&
$_‐>isa('Math::BigInt'))
{








$bit
=
$class‐>string2bit(shift(@params)‐>as_bin());




}




when
(m/^d+$/)
{








$bit
=
$class‐>int2bit(shift(@params));




}




when
(m/^0[bB][01]+$/)
{








$bit
=
$class‐>string2bit(shift(@params));




}




when
(m/^[$ZERO$ONE]+$/)
{








$bit
=
$class‐>bit2bit(shift(@params));




}




Bitmask::Data
— 03 Oct 2008
Handle unlimited length bitmasks in an easy and flexible way
while
(
my
(
$option,
$value
)
=
each
%{$args}
)
{





given
($option)
{









when
('rules')
{









when
('terminals')
{          








when
('trace_predefineds')
{









when
('start')
{              








when
('trace_iterations')
{









when
('academic')
{           








when
('trace_priorities')
{









when
('default_null_value')
{ 








when
('trace_completions')
{









when
('default_action')
{     








when
('location_callback')
{









when
('default_lex_prefix')
{ 








when
('opaque')
{









when
('default_lex_suffix')
{ 








when
('cycle_action')
{









when
('ambiguous_lex')
{      








when
('cycle_depth')
{









when
('strip')
{              








when
('warnings')
{









when
('trace_file_handle')
{ 








when
('code_lines')
{









when
('trace_actions')
{      








when
('allow_raw_source')
{









when
('trace_lex')
{          








when
('max_parses')
{









when
('trace_lex_tries')
{    








when
('version')
{









when
('trace_lex_matches')
{ 








when
('semantics')
{









when
('trace_values')
{       








when
('lex_preamble')
{









when
('trace_rules')
{        








when
('preamble')
{









when
('trace_strings')
{      








default
{




Parse::Marpa::Internal
my
$attrz











=
local
$que‐>{
attrib
}











=
$job2attrz{
$job_id
}











//=
$que‐>merge_attrib(
$job_id
)











;




Parallel::Depend
— 12 Aug 2009
Parallel-dependent dispatch of perl or shell code
foreach
my
$shipment
(@{$response‐>shipment})
{




say
".==========================================.";




say
"|
Shipment
$count

























|";




say
$shipment‐>serialize‐>draw;




say
"";




if
($self‐>verbose)
{








say
$shipment‐>xml‐>toString(1);




}




$count
++;
}




Parallel::Depend
— 12 Aug 2009
Parallel-dependent dispatch of perl or shell code
use
5.010000;

            print
"n";
            print
"
chaptersn";




DVD::Read
— 16 Nov 2008
libdvdread perl binding
do_something()
//
return
NOT_FOUND;
do_something()
//
return
NOT_FOUND;




is_leap_year()





?
($n
=
366)





:
($n
=
365)




;
Part V
Use cases
Part V
Use cases
and what to care about
How to enable
use
v5.10;

use
Modern::Perl;

use
common::sense;
use
feature
':5.10.1';
use
feature
':5.10';
use
feature
':5.10.1';
use
feature
':5.10';

           5.10 reads entire string
use
feature
':5.10.1';
use
feature
':5.10';

           5.10 reads entire string



use
feature
':5.10.1';
use
feature
':5.10';

           5.10.1 — first two parts only
use
feature
':5.10.1';
use
feature
':5.10';

           5.10 reads entire string



use
feature
':5.10.1';
use
feature
':5.10';

           5.10.1 — first two parts only
use
feature
':5.10.7';
use
everywhere
q(feature
':5.10');
use
MyModule;
MyModule‐>my_sub($$);
use
everywhere
q(feature
':5.10');
use
MyModule;
MyModule‐>my_sub($$);



package
MyModule;
sub
my_sub
{




say
$_[1];
}
1;
>
perl
‐E
"say
$$;"
~~ to check
if something is in the list
if
($last_name
~~
@attendees)
{...}
~~ to compare arrays
my
@a
=
(1,
3,
5);
my
@b
=
(1,
3,
5);
say
@a
~~
@b;
#
1
my
@a
=
(1,
3,





5);
my
@b
=
(1,
qr/d/,
5);
say
@a
~~
@b;
#
1




               Note, this
               is not
     element by element comparision
my
@a
=
(1,
3,





5);
my
@b
=
(1,
qr/d/,
5);
say
@a
~~
@b;
#
1




               Note, this
                  is
      element by element matching
~~ to check
command line arguments
%
./some_programme
‐‐debug
‐d
%
./some_programme
‐‐debug
‐d


say
'Debug'

if
'‐‐debug'
~~
@ARGV;
say
'Daemon'
if
'‐d'
~~
@ARGV;
%
./some_programme
‐‐debug
‐d


say
'Debug'

if
'‐‐debug'
~~
@ARGV;
say
'Daemon'
if
'‐d'
~~
@ARGV;


say
'Help'





if
/^(‐h|‐‐help)$/
~~
@ARGV;
Chained //
my
$ip
=





$ENV{X_HTTP_FORWARDED_FOR}
//




$ENV{HTTP_X_REAL_IP}






//




$ENV{REMOTE_ADDR};
my
$ip
=





$page‐>param('request_ip')
//




$ENV{X_HTTP_FORWARDED_FOR}
//




$ENV{HTTP_X_REAL_IP}






//




$ENV{REMOTE_ADDR};



         Easy to update
my
$ip
=





$ENV{HTTP_X_REAL_IP}






//




$page‐>param('request_ip')
//




$ENV{X_HTTP_FORWARDED_FOR}
//




$ENV{REMOTE_ADDR};



       Easy order control
state for counters
sub
count
{




state
$c;




return
++$c;
}


say
count();
#
1
say
count();
#
2
state
$count;
unless
($count)
{




#
SQL‐query
select
count(*)
...
}


my
$offset
=
int
rand
$count;
#
SQL‐query

#
select
...
limit
$offset,
1
for and when
use
v5.10;
my
@array
=
(1..20);
my
$count
=
0;
for(@array)
{




when(/[02468]$/)
{








$count++;




}




say;
}
say
$count;
use
v5.10;
my
@array
=
(1..20);
my
$count
=
0;
for(@array)
{




when(/[02468]$/)
{








$count++;




}




say;
}
say
$count;

#
10
use
v5.10;
my
@array
=
(1..20);
my
$count
=
0;
for(@array)
{




when(/[02468]$/)
{








$count++;




}




say;
}
say
$count;

#
10
1
use
v5.10;
                         3
my
@array
=
(1..20);
my
$count
=
0;           5
for(@array)
{            7




when(/[02468]$/)
{   9








$count++;        11




}                    13




say;                 15
}                        17
say
$count;

#
10        19
use
v5.10;
my
@array
=
(1..20);
my
$count
=
0;
for(@array)
{




when(/[02468]$/)
{








$count++;
continue;




}




say;
}
say
$count;

#
10
>
perl5.10
‐E



"say
for
1..3"



>
perl6
‐e



"say
for
1..3"
>
perl5.10
‐E
    1


"say
for
1..3"   2
                   3

>
perl6
‐e
       n


"say
for
1..3"   n
                   n
More

     A number of
fascinating and useful
    regex features
Part V.X
__END__


Andrew Shitov
andy@shitov.ru   talks.shitov.ru

More Related Content

What's hot

C++ for Java Developers (JavaZone 2017)
C++ for Java Developers (JavaZone 2017)C++ for Java Developers (JavaZone 2017)
C++ for Java Developers (JavaZone 2017)Patricia Aas
 
Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013
Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013
Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013Puppet
 
PHP traits, treat or threat?
PHP traits, treat or threat?PHP traits, treat or threat?
PHP traits, treat or threat?Nick Belhomme
 
Java Keeps Throttling Up!
Java Keeps Throttling Up!Java Keeps Throttling Up!
Java Keeps Throttling Up!José Paumard
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides22021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2LiviaLiaoFontech
 
Scala parsers Error Recovery in Production
Scala parsers Error Recovery in ProductionScala parsers Error Recovery in Production
Scala parsers Error Recovery in ProductionAlexander Azarov
 
Mastering Namespaces in PHP
Mastering Namespaces in PHPMastering Namespaces in PHP
Mastering Namespaces in PHPNick Belhomme
 
What's new in Perl 5.10?
What's new in Perl 5.10?What's new in Perl 5.10?
What's new in Perl 5.10?acme
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
How Functions Work
How Functions WorkHow Functions Work
How Functions WorkSaumil Shah
 
The promise of asynchronous PHP
The promise of asynchronous PHPThe promise of asynchronous PHP
The promise of asynchronous PHPWim Godden
 
Damien seguy php 5.6
Damien seguy php 5.6Damien seguy php 5.6
Damien seguy php 5.6Damien Seguy
 
CLI, the other SAPI
CLI, the other SAPICLI, the other SAPI
CLI, the other SAPICombell NV
 
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...Puppet
 

What's hot (19)

PHP 5.3
PHP 5.3PHP 5.3
PHP 5.3
 
C++ for Java Developers (JavaZone 2017)
C++ for Java Developers (JavaZone 2017)C++ for Java Developers (JavaZone 2017)
C++ for Java Developers (JavaZone 2017)
 
Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013
Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013
Loops and Unicorns - The Future of the Puppet Language - PuppetConf 2013
 
Perl 20tips
Perl 20tipsPerl 20tips
Perl 20tips
 
PHP traits, treat or threat?
PHP traits, treat or threat?PHP traits, treat or threat?
PHP traits, treat or threat?
 
Java Keeps Throttling Up!
Java Keeps Throttling Up!Java Keeps Throttling Up!
Java Keeps Throttling Up!
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides22021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2
 
Scala parsers Error Recovery in Production
Scala parsers Error Recovery in ProductionScala parsers Error Recovery in Production
Scala parsers Error Recovery in Production
 
Mastering Namespaces in PHP
Mastering Namespaces in PHPMastering Namespaces in PHP
Mastering Namespaces in PHP
 
Perl Moderno
Perl ModernoPerl Moderno
Perl Moderno
 
Peek at PHP 7
Peek at PHP 7Peek at PHP 7
Peek at PHP 7
 
What's new in Perl 5.10?
What's new in Perl 5.10?What's new in Perl 5.10?
What's new in Perl 5.10?
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
effective_r27
effective_r27effective_r27
effective_r27
 
How Functions Work
How Functions WorkHow Functions Work
How Functions Work
 
The promise of asynchronous PHP
The promise of asynchronous PHPThe promise of asynchronous PHP
The promise of asynchronous PHP
 
Damien seguy php 5.6
Damien seguy php 5.6Damien seguy php 5.6
Damien seguy php 5.6
 
CLI, the other SAPI
CLI, the other SAPICLI, the other SAPI
CLI, the other SAPI
 
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
 

Similar to Perl 5.10 in 2010

Introduction to Modern Perl
Introduction to Modern PerlIntroduction to Modern Perl
Introduction to Modern PerlDave Cross
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl TechniquesDave Cross
 
PHP Workshop Notes
PHP Workshop NotesPHP Workshop Notes
PHP Workshop NotesPamela Fox
 
Whatsnew in-perl
Whatsnew in-perlWhatsnew in-perl
Whatsnew in-perldaoswald
 
DevOps in PHP environment
DevOps in PHP environmentDevOps in PHP environment
DevOps in PHP environmentEvaldo Felipe
 
What's new in Perl 5.14
What's new in Perl 5.14What's new in Perl 5.14
What's new in Perl 5.14Andrew Shitov
 
Php Reusing Code And Writing Functions
Php Reusing Code And Writing FunctionsPhp Reusing Code And Writing Functions
Php Reusing Code And Writing Functionsmussawir20
 
Introducing PHP Latest Updates
Introducing PHP Latest UpdatesIntroducing PHP Latest Updates
Introducing PHP Latest UpdatesIftekhar Eather
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHPBradley Holt
 
Perl 5.10
Perl 5.10Perl 5.10
Perl 5.10acme
 
PHP: The easiest language to learn.
PHP: The easiest language to learn.PHP: The easiest language to learn.
PHP: The easiest language to learn.Binny V A
 
Perl Tidy Perl Critic
Perl Tidy Perl CriticPerl Tidy Perl Critic
Perl Tidy Perl Criticolegmmiller
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In PerlKang-min Liu
 
SymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performancesSymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performancesjulien pauli
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottO'Reilly Media
 
Giới thiệu PHP 7
Giới thiệu PHP 7Giới thiệu PHP 7
Giới thiệu PHP 7ZendVN
 
Flying under the radar
Flying under the radarFlying under the radar
Flying under the radarMark Baker
 

Similar to Perl 5.10 in 2010 (20)

Introduction to Modern Perl
Introduction to Modern PerlIntroduction to Modern Perl
Introduction to Modern Perl
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl Techniques
 
PHP Workshop Notes
PHP Workshop NotesPHP Workshop Notes
PHP Workshop Notes
 
Whatsnew in-perl
Whatsnew in-perlWhatsnew in-perl
Whatsnew in-perl
 
DevOps in PHP environment
DevOps in PHP environmentDevOps in PHP environment
DevOps in PHP environment
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
What's new in Perl 5.14
What's new in Perl 5.14What's new in Perl 5.14
What's new in Perl 5.14
 
Php Reusing Code And Writing Functions
Php Reusing Code And Writing FunctionsPhp Reusing Code And Writing Functions
Php Reusing Code And Writing Functions
 
Introducing PHP Latest Updates
Introducing PHP Latest UpdatesIntroducing PHP Latest Updates
Introducing PHP Latest Updates
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
PHP 7
PHP 7PHP 7
PHP 7
 
Perl 5.10
Perl 5.10Perl 5.10
Perl 5.10
 
PHP: The easiest language to learn.
PHP: The easiest language to learn.PHP: The easiest language to learn.
PHP: The easiest language to learn.
 
Php
PhpPhp
Php
 
Perl Tidy Perl Critic
Perl Tidy Perl CriticPerl Tidy Perl Critic
Perl Tidy Perl Critic
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In Perl
 
SymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performancesSymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performances
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter Scott
 
Giới thiệu PHP 7
Giới thiệu PHP 7Giới thiệu PHP 7
Giới thiệu PHP 7
 
Flying under the radar
Flying under the radarFlying under the radar
Flying under the radar
 

More from Andrew Shitov

Creating a compiler in Perl 6
Creating a compiler in Perl 6Creating a compiler in Perl 6
Creating a compiler in Perl 6Andrew Shitov
 
Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)Andrew Shitov
 
Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6Andrew Shitov
 
Perl 6 for Concurrency and Parallel Computing
Perl 6 for Concurrency and Parallel ComputingPerl 6 for Concurrency and Parallel Computing
Perl 6 for Concurrency and Parallel ComputingAndrew Shitov
 
The Joy of Smartmatch
The Joy of SmartmatchThe Joy of Smartmatch
The Joy of SmartmatchAndrew Shitov
 
Perl 7, the story of
Perl 7, the story ofPerl 7, the story of
Perl 7, the story ofAndrew Shitov
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 
Как очистить массив
Как очистить массивКак очистить массив
Как очистить массивAndrew Shitov
 
Что нового в Perl 5.14
Что нового в Perl 5.14Что нового в Perl 5.14
Что нового в Perl 5.14Andrew Shitov
 
Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6Andrew Shitov
 
There's more than one way to empty it
There's more than one way to empty itThere's more than one way to empty it
There's more than one way to empty itAndrew Shitov
 
How to clean an array
How to clean an arrayHow to clean an array
How to clean an arrayAndrew Shitov
 
Say Perl на весь мир
Say Perl на весь мирSay Perl на весь мир
Say Perl на весь мирAndrew Shitov
 

More from Andrew Shitov (20)

Perl6 one-liners
Perl6 one-linersPerl6 one-liners
Perl6 one-liners
 
Creating a compiler in Perl 6
Creating a compiler in Perl 6Creating a compiler in Perl 6
Creating a compiler in Perl 6
 
Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)Fun with Raspberry PI (and Perl)
Fun with Raspberry PI (and Perl)
 
Perl6 in-production
Perl6 in-productionPerl6 in-production
Perl6 in-production
 
Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6Параллельные вычисления в Perl 6
Параллельные вычисления в Perl 6
 
AllPerlBooks.com
AllPerlBooks.comAllPerlBooks.com
AllPerlBooks.com
 
Perl 6 for Concurrency and Parallel Computing
Perl 6 for Concurrency and Parallel ComputingPerl 6 for Concurrency and Parallel Computing
Perl 6 for Concurrency and Parallel Computing
 
The Joy of Smartmatch
The Joy of SmartmatchThe Joy of Smartmatch
The Joy of Smartmatch
 
YAPC::Europe 2013
YAPC::Europe 2013YAPC::Europe 2013
YAPC::Europe 2013
 
Perl 7, the story of
Perl 7, the story ofPerl 7, the story of
Perl 7, the story of
 
Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Как очистить массив
Как очистить массивКак очистить массив
Как очистить массив
 
Что нового в Perl 5.14
Что нового в Perl 5.14Что нового в Perl 5.14
Что нового в Perl 5.14
 
Perl6 grammars
Perl6 grammarsPerl6 grammars
Perl6 grammars
 
Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6Text in search queries with examples in Perl 6
Text in search queries with examples in Perl 6
 
There's more than one way to empty it
There's more than one way to empty itThere's more than one way to empty it
There's more than one way to empty it
 
Perl 6 by example
Perl 6 by examplePerl 6 by example
Perl 6 by example
 
How to clean an array
How to clean an arrayHow to clean an array
How to clean an array
 
Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
 
Say Perl на весь мир
Say Perl на весь мирSay Perl на весь мир
Say Perl на весь мир
 

Recently uploaded

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 

Recently uploaded (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 

Perl 5.10 in 2010