Difference between revisions of "Perl"

From dbawiki
Jump to: navigation, search
Line 11: Line 11:
  
 
From: [http://www.commandlinefu.com/commands/view/5235/perl-simple-webserver commandlinefu.com]
 
From: [http://www.commandlinefu.com/commands/view/5235/perl-simple-webserver commandlinefu.com]
 +
 +
 +
===Difference in hours between two dates===
 +
<pre>
 +
use Time::localtime;
 +
use DateTime::Format::Strptime qw();
 +
 +
        my $parser = DateTime::Format::Strptime->new (
 +
            pattern  => '%d-%b-%y %H:%M:%S',
 +
            locale  => 'en',  # 'Mon', 'Jul' are English
 +
            on_error => 'croak'
 +
        );
 +
        my $timethen = $parser->parse_datetime( $started );
 +
        my $timenow  = DateTime->now( time_zone => 'local' )->set_time_zone('floating');
 +
        my $timediff = $timenow->subtract_datetime($timethen);
 +
 +
print ('<!-- HOURS: ',$timediff->hours(),' -->',"\n");
 +
</pre>

Revision as of 10:16, 7 June 2013

Some one liners: socher.org

A one-line web server!

perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 ? "./$1 |" : $1) if /^GET \/(.*) / })'
  • First we accept a socket and fork the server. Then we overload the new socket as a code ref. This code ref takes one argument, another code ref, which is used as a callback.
  • The callback is called once for every line read on the socket. The line is put into $_ and the socket itself is passed in to the callback.
  • Our callback is scanning the line in $_ for an HTTP GET request. If one is found it parses the file name into $1. Then we use $1 to create an new IO::All file object... with a twist. If the file is executable("-x"), then we create a piped command as our IO::All object. This somewhat approximates CGI support.
  • Whatever the resulting object is, we direct the contents back at our socket which is in $_[0].

From: commandlinefu.com


Difference in hours between two dates

use Time::localtime;
use DateTime::Format::Strptime qw();

        my $parser = DateTime::Format::Strptime->new (
            pattern  => '%d-%b-%y %H:%M:%S',
            locale   => 'en',   # 'Mon', 'Jul' are English
            on_error => 'croak'
        );
        my $timethen = $parser->parse_datetime( $started );
        my $timenow  = DateTime->now( time_zone => 'local' )->set_time_zone('floating');
        my $timediff = $timenow->subtract_datetime($timethen);

print ('<!-- HOURS: ',$timediff->hours(),' -->',"\n");