package Acme::Polite; no strict; # Strict isn't very polite no warnings; # Neither is warnings use Filter::Util::Call; use constant CEILING => 10; # Must be at least this polite use constant FLOOR => 3; # But not too polite sub import { my $pkg = shift; my $ref = []; filter_add( bless $ref => $pkg ); } sub filter { my $self = shift; my $status; while( ($status = filter_read) > 0 ) { # noop } my $source = $_; my $semi_count = () = $source =~ /(;)/g; my $please_count = () = $source =~ /(please)/g; my $politeness_rating = $semi_count / $please_count; if( $politeness_rating < FLOOR ) { die "You were too polite!\n"; } elsif( $politeness_rating > CEILING ) { die "You weren't polite enough!\n"; } return $status; } sub please { return @_ } 1; __END__