Acme-Tools
view release on metacpan or search on metacpan
miles2 => 1609.344**2,
sqmi => 1609.344**2,
yd2 => (0.0254*12*3)**2, #square yard
sqyd => (0.0254*12*3)**2,
yard2 => (0.0254*12*3)**2,
sqyard => (0.0254*12*3)**2,
rood => 1210*(0.0254*12*3)**2, # 1/4 acres
roods => 1210*(0.0254*12*3)**2, # 1/4 acres
ac => 4840*(0.0254*12*3)**2, # 4840 square yards = 1 chain x 1 furlong
acre => 4840*(0.0254*12*3)**2,
acres => 4840*(0.0254*12*3)**2,
homestead => 4840*(0.0254*12)**2 *160, #160 acres US Surveyors or 1/4 sqmiles
township => 4840*(0.0254*12)**2 *160*144, #144 homesteads or 36 sqmiles
perches => 4840*(0.0254*12)**2 /160, #160 perches = 1 acre in sri lanka
sotka => 100, #russian are
jerib => 10000, #iran hectare
djerib => 10000, #turkish hectare
gongqing => 10000, #chinese hectare
manzana => 10000, #argentinian hectare
bunder => 10000, #dutch hectare
centiare => 1,
deciare => 10,
ca => 1,
mu => 10000/15, #China
qing => 10000/0.15, #China
dunam => 10000/10, #Middle East
'dönüm' => 10000/10, #Middle East
stremmata => 10000/10, #Greece
rai => 10000/6.25, #Thailand
cho => 10000/1.008, #Japan
feddan => 10000/2.381, #Egypt
earths => 510072000e6, #510072000 km2, surface area of earth
barn => 1e-28, #physics
outhouse => 1e-34, #physics
shed => 1e-52, #physics
brass => 100*(0.0254*12)**2, #100 square feet ~ 9.29 m2
square => 100*(0.0254*12)**2, #100 square feet ~ 9.29 m2
morgen => 0.856532 * 10000, #0.856532 hectares
bornholm => 588.36e6, #area of danish island bornholm, 588km2
texas => 695670e6, #area of texas, 695 670 square km
},
volume=>{
m3 => 1, #1000 L
l => 0.001,
L => 0.001,
_L => 0.001,
_l => 0.001,
liter => 0.001,
liters => 0.001,
litre => 0.001,
litres => 0.001,
gal => 231 * 0.0254**3, #3.785411784 L = 0.003785411784 m3, #231 cubic inches
gallon => 231 * 0.0254**3,
gallons => 231 * 0.0254**3,
gallon_us => 231 * 0.0254**3, #231 cubic inches
gallon_wine => 231 * 0.0254**3, #queen anne's gallon
gallon_ale => 282 * 0.0254**3, #beer
gallon_corn => 268.8*0.0254**3, #corn, or winchester gallon
gallon_uk => 4.54609/1000, #constant 4.54609 from definition
gallon_imp => 4.54609/1000, #imperial
gallon_us_dry => 4.40488377086/1000, # ~ 9.25**2*pi*2.54**3/1000 L
#hogshead, gill, pail, jigger, jackpot, The Science of Measurement - A Historical Survey (Klein)
cm3 => 0.01**3, #0.001 L
in3 => 0.0254**3, #0.016387064 L
ft3 => (0.0254*12)**3,
tablespoon=> 3.785411784/256, #14.78676478125 mL
tsp => 3.785411784/256/3, #4.92892159375 mL
teaspoon => 3.785411784/256/3, #4.92892159375 mL
floz => 3.785411784/128, #fluid ounce US
floz_uk => 4.54609/160, #fluid ounce UK
pint => 4.54609/8000, #0.56826125 L
pint_uk => 4.54609/8000,
pint_imp => 4.54609/8000,
pint_us => 3.785411784/8000, #0.473176473
quart => 4.54609/4000, #2*pint
pottle => 4.54609/2000, #2*quart = gallon_uk/2
#therm => 2.74, #? 100000BTUs? (!= thermie)
#thm => 2.74, #? (!= th)
fat => 42*231*2.54**3/1e6,
bbl => 42*231*2.54**3/1e6, #oil barrel ~159 liters https://en.wikipedia.org/wiki/Barrel_(unit)
Mbbl => 42*231*2.54**3/1e3, #mille (thousand) oil barrels, M er mille her, ikke mega!
MMbbl => 42*231*2.54**3, #mille mille (million) oil barrels
drum => 0.208, #208 L
container => 33.1e3, #container20
container20 => 33.1e3,
container40 => 67.5e3,
container40HC => 75.3e3,
container45HC => 86.1e3,
firkin => 282*0.0254**3 * 8, #8 gallon_ale
#Norwegian:
meterfavn => 2 * 2 * 0.6, #fire wood/ved 2.4 m3
storfavn => 2 * 2 * 3, #fire wood/ved 12 m3
},
time =>{
s => 1,
_s => 1,
sec => 1,
second => 1,
seconds => 1,
m => 60,
min => 60,
minute => 60,
minutes => 60,
h => 60*60,
hr => 60*60,
hour => 60*60,
hours => 60*60,
d => 60*60*24,
dy => 60*60*24,
day => 60*60*24,
days => 60*60*24,
w => 60*60*24*7,
week => 60*60*24*7,
weeks => 60*60*24*7,
mo => 60*60*24 * 365.2425/12,
mon => 60*60*24 * 365.2425/12,
month => 60*60*24 * 365.2425/12,
quarter => 60*60*24 * 365.2425/12 * 3, #3 months
season => 60*60*24 * 365.2425/12 * 3, #3 months
y => 60*60*24 * 365.2425, # 365+97/400 #97 leap yers in 400 years
year => 60*60*24 * 365.2425,
=head2 urldec
Opposite of L</urlenc>.
Example, this returns 'C< ø>'. That is space and C<< ø >>.
urldec('+%C3')
=cut
sub urldec {
my $str=shift;
$str=~s/\+/ /gs;
$str=~s/%([a-f\d]{2})/pack("C", hex($1))/egi;
return $str;
}
=head2 ht2t
C<ht2t> is short for I<html-table to table>.
This sub extracts an html-C<< <table> >>s and returns its C<< <tr>s >>
and C<< <td>s >> as an array of arrayrefs. And strips away any html
inside the C<< <td>s >> as well.
my @table = ht2t($html,'some string occuring before the <table> you want');
Input: One or two arguments.
First argument: the html where a C<< <table> >> is to be found and converted.
Second argument: (optional) If the html contains more than one C<<
<table> >>, and you do not want the first one, applying a second
argument is a way of telling C<ht2t> which to capture: the one with this word
or string occurring before it.
Output: An array of arrayrefs.
C<ht2t()> is a quick and dirty way of scraping (or harvesting as it is
also called) data from a web page. Look too L<HTML::Parse> to do this
more accurate.
Example:
use Acme::Tools;
use LWP::Simple;
my $url = "http://en.wikipedia.org/wiki/List_of_countries_by_population";
for( ht2t( get($url), "Countries" ) ) {
my($rank, $country, $pop) = @$_;
$pop =~ s/,//g;
printf "%3d | %-32s | %9d\n", @$_ if $pop>0;
}
Output:
1 | China | 1367740000
2 | India | 1262090000
3 | United States | 319043000
4 | Indonesia | 252164800
5 | Brazil | 203404000
...and so on.
=cut
sub ht2t {
my($f,$s,$r)=@_; 1>@_||@_>3 and croak; $s='' if @_==1;
$f=~s,.*?($s).*?(<table.*?)</table.*,$2,si;
my $e=0;$e++ while index($f,$s=chr($e))>=$[;
$f=~s/<t(d|r|h).*?>/\l$1$s/gsi;
$f=~s/\s*<.*?>\s*/ /gsi;
my @t=split("r$s",$f);shift @t;
$r||=sub{s/&(#160|nbsp);/ /g;s/&/&/g;s/^\s*(.*?)\s*$/$1/s;
s/(\d) (\d)/$1$2/g if /^[\d \.\,]+$/};
for(@t){my @r=split/[dh]$s/;shift@r;$_=[map{&$r;$_}@r]}
@t;
}
=head1 FILES, DIRECTORIES
=head2 writefile
Justification:
Perl needs three or four operations to make a file out of a string:
open my $FILE, '>', $filename or die $!;
print $FILE $text;
close($FILE);
This is way simpler:
writefile($filename,$text);
Sub writefile opens the file i binary mode (C<binmode()>) and has two usage modes:
B<Input:> Two arguments
B<First argument> is the filename. If the file exists, its overwritten.
If the file can not be opened for writing, a die (a croak really) happens.
B<Second input argument> is one of:
=over 4
=item * Either a scaler. That is a normal string to be written to the file.
=item * Or a reference to a scalar. That referred text is written to the file.
=item * Or a reference to an array of scalars. This array is the written to the
file element by element and C<< \n >> is automatically appended to each element.
=back
Alternativelly, you can write several files at once.
Example, this:
writefile('file1.txt','The text....tjo');
writefile('file2.txt','The text....hip');
( run in 2.117 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )