Perl Cheat Sheet
LWP
File download
use LWP::Simple; getstore("http://ftp.hitchhiker.com/data/currency.zip", "c:\\curbla.zip");
Manip
DateCalc
use Date::Manip; $bla=&UnixDate(DateCalc("2013-05-31","+ 1 days",\$err),"%Y-%m-%d")
my $pageDate = "201402190000"; $pageDate = UnixDate("$pageDate","%A %d %B %Y %H:%M"); print "$pageDate";
Array
Return array from function
#!/usr/bin/perl use strict; use Data::Dumper; my @ret=&retTest; print "=>$ret[0]\n"; print "=>$ret[1]\n"; sub retTest { my @subRet; @subRet=("a","b"); return @subRet; }
Hash
Double nested
Double nested sample,
for( @{$_->{FaresResponsePassenger}} ){
Experts Exchange
I got the following hash by a soap response, example:
$VAR1 = { 'Response' => { 'Category' => [ { 'ID' => '12345', 'Articel' => { 'Segment' => [ { 'Number' => '1', }, { 'Number' => '2', } ] } }, { 'ID' => '6789', 'Articel' => { 'Segment' => [ { 'Number' => '1', }, { 'Number' => '2', } ] } } ] }, };
my $n=0; $n += grep$_->{Number},@{$_->{Articel}{Segment}} for @{$VAR1->{Response}{Category}};
ExpertsExchange-1
This is a follow up question from ID 25120698. I got the following hash by a soap response, example:
$VAR1 = { 'Response' => { 'Category' => [ { 'ID' => '123', 'Articel' => { 'Segment' => [ { 'Number' => '1', }, { 'Number' => '2', } ] } }, { 'ID' => '456', 'Articel' => { 'Segment' => [ { 'Number' => '3', }, { 'Number' => '4', } ] } }, { 'ID' => '789', 'Articel' => { 'Segment' => { 'Number' => '5', } } } ] }, };
you can check the ref is ARRAY or HASH and depend on which you can print it.
for my $v (@{$VAR1->{Response}{Category}}){ if(ref($v->{Articel}{Segment}) eq "ARRAY"){ ### Check it is ARRAy or HASH for my $w (@{$v->{Articel}{Segment}}){ print "$w->{Number}\n"; } } else { for my $w (keys (%{$v->{Articel}{Segment}})){ ###Get the element as HASH ref and print print "$v->{Articel}{Segment}{$w}\n"; } } }
Another sample:
$w contains this:
$VAR1 = [ { 'value' => { 'text' => 'auto_generated_pool_enterprise' }, 'k' => 'Pool' }, { 'k' => 'used', 'value' => { 'text' => '43.98' } } ];
Want 43.98
for my $x ( @{$w}){ if ($x->{'value'}->{'text'} !~ /auto/) { print $x->{'value'}->{'text'} . "\n"; } }
EE3
Hi i'm looking for a regex to split the filename from a path, eg $_ = '/path/to/my//file/space /my music - name.mp3';
how do i get the filename (my music - name.mp3) and the path (/path/to/my//file/space /) into a variable, i'm trying to do something like $MP3= '/path/to/my//file/space /my music - name.mp3'; ($var,$value) = split(/\/([^.]*)/ig,$MP3,2);
i'm lost, any idea ?
thx
$_ = '/path/to/my//file/space /my music - name.mp3'; my ($var,$value) = /^(.*\/)(.*)$/;
FILE STAT
Get the mod date of a file
use File::stat qw(:FIELDS); my $stat = stat($_) or die "No File :$!"; #PS: So behandelt man Filstats! $tmpsize = $st_size; $tmpmod = $st_mtime;
Sort
Sort scalar
@splunkfiles = sort {$b cmp $a} @splunkfiles;
Close DB Handle
$sql->finish; #Close DB Handle
Socket receive
#Thanks! #http://stackoverflow.com/questions/14444539/perl-client-socket-recv-vs-when-server-socket-is-invoking-send-multiple-ti my $buf; do { defined $socket->recv($buf, 8129) or die "recv: $!"; #print qq(received: "$buf"\n); $RecData.=$buf; } while ($buf !~ /~~/);
Console autoflush
#Use autoflush with STDOUT: local $| = 1; # Or use IO::Handle; STDOUT->autoflush;
ISO8601 Dates
ISO 8601 Date to Unix
#https://metacpan.org/pod/DateTime::Format::ISO8601 use DateTime::Format::ISO8601; my $dt = DateTime::Format::ISO8601->parse_datetime('2019-02-14T00:00:00'); print $dt->strftime('%F %T') . "\n"; print $dt->strftime('%F') . "\n"; print $dt->strftime('%a') . "\n"; print $dt->strftime('%T') . "\n";
Returns:
2019-02-14 00:00:00 2019-02-14 Thu 00:00:00 560 09:20:00
ISO 8601 Duration to Minutes
#https://metacpan.org/pod/DateTime::Format::Duration::ISO8601a use DateTime::Format::Duration::ISO8601; my $format = DateTime::Format::Duration::ISO8601->new; my $d = $format->parse_duration('PT9H20M'); print $d->in_units('minutes'); # => 61
Format Duration
use DateTime::Format::Duration; my $duration = DateTime::Duration->new(minutes => 560); my $formatter = DateTime::Format::Duration->new( pattern => "%H:%M:%S", normalize => 1, ); $duration=$formatter->format_duration($duration); print "\n$duration\n";
Epoch TIme
use Date::Manip; my $tEpoche=UnixDate('2018-03-30 10:00:00' ,"%s");
Timezones
- See: https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations
- See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Get Timezoe with short name abbreviation and offset
use DateTime; use DateTime::TimeZone; my $tz = DateTime::TimeZone->new( name => 'Europe/Berlin' ); $dt = DateTime->new( { year => 2014, month => 12, day => 19, hour => 2, minute=> 2, second=> 0 }; my $offset = $tz->offset_for_datetime($dt); my $sn = $tz->short_name_for_datetime( $dt ); print "$dt $offset $sn\n";
Returns:
2014-12-19T02:02:00 3600 CET
use DateTime; use DateTime::TimeZone; my $tz = DateTime::TimeZone->new( name => 'Europe/Berlin' ); $dt = DateTime->new( { year => 2014, month => 10, day => 19, hour => 2, minute=> 2, second=> 0 }; my $offset = $tz->offset_for_datetime($dt); my $sn = $tz->short_name_for_datetime( $dt ); print "$dt $offset $sn\n";
Returns:
2014-10-19T02:02:00 7200 CEST
Convert to GMT
$datestring = strftime "%x %T", gmtime; print "GMT date and time $datestring\n";
Convert to GMT to CEST
my $datex = UnixDate( Date_ConvTZ( $datestring, 'GMT', 'CEST' ), "%Y-%m-%d %T"); print "Convert GMT to CST - $datestring - $datex\n";
DBI
Return entire row from a sql statement
my $sth = $dbh->prepare('select * from sys.dm_qn_subscriptions'); $sth->execute; while ( my @row = $sth->fetchrow_array ) { print "@row\n"; }