Perl is a high-level, general-purpose, interpreted, dynamic programming language designed by Larry Wall.
Perl (Wikipedia)
Official site:
https://www.perl.org/
Perl introduction
https://perldoc.perl.org/5.32.0/perlintro.html
Tutorials
https://www.tutorialspoint.com/perl/index.htm
Examples:
Calculate square root of a number
We create a file with this code. E.g: square_big.pl
#!/usr/bin/perl
# Calculate square root of a number.
use strict;
use warnings;
use bignum;
# 500 digits maximum precision.
Math::BigFloat->precision(-500);
my $number = shift;
die "No number to calculate square root\n" unless (defined $number);
die "Number shall be greater or equal than zero\n" unless ($number >= 0);
# Hardcoded precision limit.
my $limit = 1e-490;
sub square_root {
my $num = shift;
my $low = 0;
my $high = ($num < 1) ? $num: 1;
my $av = ($low + $high) / 2;
my $square;
while ($high - $low > $limit) {
$square = $av * $av;
if ($square > $num) {
$high = $av;
} elsif ($square < $num) {
$low = $av;
} else {
return $av;
}
$av = ($low + $high) / 2;
}
return $av;
}
print "Square root of $number: ", square_root($number), "\n";
To execute this script:
$ perl square_big.pl 2Square root of 2: 1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147010955997160597027453459686201472851741864088919860955232923048430871432145083976260362799525140798968725339654633180882964062061525835239505474575028775996172983557522033753185701135437460340849884716038689997069900481503054402779031645424782306849293691862158057846311159666871301301561854084226857
Calculate PI number
We create a file with this code. E.g: pi_big.pl
#!/usr/bin/perl -w
# Calculate PI number using this formula:
# r[0] = 0;
# r[i+1] = sqrt((1 + r[i]) / 2);
# delta[i] = (2**(i+1)) * (1 - r[i]) * sqrt(1 - r[i]*r[i]);
# pi = delta[0] + delta[1] + delta[2] + ... + delta[i] + ... ; i = 0 .. inf
use strict;
use warnings;
use bignum;
Math::BigFloat->precision(-500);
my $digits = shift or 20;
my $limit = 1e-490;
sub square_root {
my $num = shift;
# print "num: $num\n";
my $low = 0;
my $high = ($num > 1) ? $num: 1;
my $av = ($low + $high) / 2;
my $square;
while ($high - $low > $limit) {
$square = $av * $av;
if ($square > $num) {
$high = $av;
} elsif ($square < $num) {
$low = $av;
} else {
return $av;
}
$av = ($low + $high) / 2;
}
return $av;
}
my $count = 0;
my $rr = 0;
my $rr_sq = 0;
my $acc = 0;
my $mult = 2;
while ($count < $digits) {
$acc += ($mult * (1 - $rr) * square_root(1 - $rr_sq));
$rr_sq = (1 + $rr) / 2;
$rr = square_root($rr_sq);
print "\ncount: $count -> acc: $acc\n";
$count++;
$mult *= 2;
}
print "PI: $acc\n";
To execute this script:
$ perl pi_big.pl 50PI: 3.14159265358979323846264338327542627761557698854124379668821332323163585454318619321347588827072794848299290125513043752475748631743709756275331493480837846155277063608424036342205923256904780973128978200129229250763907729304707285930150362119621428986239487332176390225309519883197664464156069660363571538639339858639258251218865408882290823280739309476412316920700408387459099100919685855465403907867105565899417280273100454810773478888978992514659302910842961017524463089418768200086897001863102645