Difference between revisions of "Perl"
From dbawiki
(→Difference in hours between two dates) |
(→Difference in hours between two dates) |
||
| Line 41: | Line 41: | ||
my $hours = $difference/60/60; | my $hours = $difference/60/60; | ||
| + | </pre> | ||
| + | ===Slurp an external file into a variable=== | ||
| + | The idea is to read an SQL file into a variable to prepare and execute it<pre> | ||
| + | #!/usr/bin/perl -w | ||
| + | use strict; | ||
| + | my $stmt; | ||
| + | my $quoted_stmt; | ||
| + | $quoted_stmt = 7; | ||
| + | open (FH,"<","test.sql") or die $!; | ||
| + | local $/=''; | ||
| + | $stmt = <FH>; | ||
| + | close FH; | ||
| + | $quoted_stmt = eval('q('.$stmt.')'); | ||
| + | print $quoted_stmt."\n"; | ||
</pre> | </pre> | ||
Revision as of 16:31, 16 October 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");
or, without using any external modules...
my ($host,$sid,$dbid,$timethen,$recid,$stamp,$started,$duration,$size,$status,$type) = split (/\|/);
# ----------------------------
# work out how old the file is
# ----------------------------
my $timenow = time();
my $difference = $timenow - $timethen; # in seconds
my $hours = $difference/60/60;
Slurp an external file into a variable
The idea is to read an SQL file into a variable to prepare and execute it
#!/usr/bin/perl -w
use strict;
my $stmt;
my $quoted_stmt;
$quoted_stmt = 7;
open (FH,"<","test.sql") or die $!;
local $/='';
$stmt = <FH>;
close FH;
$quoted_stmt = eval('q('.$stmt.')');
print $quoted_stmt."\n";