Skip to content

Instantly share code, notes, and snippets.

@hoehrmann
hoehrmann / identify-quoted-text.pl
Created February 28, 2013 01:24
Take mbox, print HTML version of contents with quoted text marked via <i> elements.
#!perl -w
use Modern::Perl;
use Algorithm::Diff::XS;
use Statistics::Basic qw/median stddev avg/;
use Mail::Mbox::MessageParser;
use MIME::Parser;
use MIME::Parser::Reader;
use Mail::Field;
use Encode;
use HTML::Entities;
use v5.16;
use strict;
use warnings;
state $f = do {
open my $f, '>:utf8', 'delme.tmp';
$f;
};
print $f "" if 0;
@hoehrmann
hoehrmann / gist:5131504
Last active December 14, 2015 18:48
Acme::IEnumerable, lazy generators for Perl.
package main;
use Modern::Perl;
use Coro::Generator;
my $even = generator {
my $x = 0;
while(1) {
$x += 2;
# use references as boxing mechanism
# yield non-reference to indicate end
@hoehrmann
hoehrmann / gist:5181285
Last active December 15, 2015 01:39
Lazy lists with state variables and $StopIteration
package Acme::IEnumerable;
use v5.16;
use strict;
use warnings;
our $StopIteration = {};
sub integers {
my ($class) = @_;
return bless sub {
@hoehrmann
hoehrmann / gist:5278590
Created March 30, 2013 22:17
Generator is a sub returning an iterator when called; an iterator is a sub returning a reference to the next element, or a non-ref value when hitting the end.
package Acme::IEnumerable::List;
use Modern::Perl;
use base qw/Acme::IEnumerable/;
1;
package Acme::IEnumerable;
use Modern::Perl;
use Carp;
package Acme::IEnumerable::IGrouping;
use Modern::Perl;
use base qw/Acme::IEnumerable/;
1;
package Acme::IEnumerable::List;
use Modern::Perl;
use base qw/Acme::IEnumerable/;
package Acme::IEnumerable::List;
use Modern::Perl;
use base qw/Acme::IEnumerable/;
sub _create {
bless {
_list => $_[0],
_new => $_[1],
}, __PACKAGE__;
}
--------------------------------------------------------------------------
| name | date |
==========================================================================
| "eGovernment Interest Group" | "2009-09-08" |
| "XML Print and Page Layout Working Group" | "2012-01-17" |
| "XML Processing Model Working Group" | "2012-01-24" |
| "Geolocation Working Group" | "2012-05-10" |
| "Web Notification Working Group" | "2012-06-14" |
| "Efficient XML Interchange Working Group" | "2012-07-31" |
| "Model-Based User Interfaces Working Group" | "2012-08-02" |
#####################################################################
#
#####################################################################
package Acme::IEnumerable::List;
use Modern::Perl;
use base qw/Acme::IEnumerable/;
use Carp;
sub _create {
bless {
@hoehrmann
hoehrmann / frei.pas
Last active December 17, 2015 00:39
Turbo Pascal program for MS-DOS reporting free and used disk space. Anno 1997, it was a rewrite-from-scratch of what was probably my first program.
Uses DOS;
var
DiskSizeMB,DiskSizeKB:Integer;
DiskFreeMB,DiskFreeKB:Integer;
GesamtMBf,GesamtKBf:integer;
GesamtMBs,GesamtKBs:integer;
Prozent:longint;
ds,df:real;
s:String;