Perl - Practical Extraction and Report LanguagePerl is an interpreted scripting language.
Perl is optimised for scanning arbitrary text files and system administration.
It has built-in extended regular expression matching and replacement, a data-flow mechanism to improve security with setuid scripts and is extensible via modules that can interface to C libraries.
Installation :sudo apt-get install perl
Compiling method :perl filename.pl
e.g
perl hello.pl 1. Simple mathematical calculation program
#usr/bin/perl
$str = " Hello ";
print "cse:$str \n";
print "2+2 = ",2+2,"\n";
print "log(1e23) = ",log(1e23),"\n";
print "sin(3.141) = ",sin(3.141), "\n";
2. Pattern Matching Program
$_="hello how are you";
if(/hello/){
print "Default Variable = $_ \n";
print "Found hello \n";
}
# i modifier ignore case difference
if(m/HOw/i){
print "found how \n";
}
#match with negation
if(!/hall/){
print "Not found hall \n";
}
else {
print "found\n"; }
3. System Command Accepting Program
$time = localtime;
print "Time is now - $time \n";
print "Enter a shell command:";
$n = <STDIN>;
system $n;
4. Program for Counting Words, Lines and Characters in a File#usr/bin/perl
$filen = "fileh.pl";
open($fh,"<",$filen);
while($line = <$fh>){
@lines = [split(/ +/,$line)];
$noline += scalar(@lines);
$words += scalar(split(/\w+/,$line));
$chars += length($line);
}
print "\n No.of Lines - $noline \n
No.of Words - $words \n
No.of Characters - $chars \n";
close($fh);
5. Program for Printing all 5 letter words in Paragraph by giving as it as input
print "Enter a text:";
while(<>){
chop;
tr/;:;.!?-//d;
foreach $w (split) {
if(length($w)==5) {
print "$w \n";
$score++;
}
}}
6. Program for Printing the words which are all end with "ly"
print "Enter the text:";
while (<>) {
foreach $wd(split){
if($wd =~ /ly$/i) {
print " $wd \n";
$var++;
}
}}
7. Program to find average length of words in a text.#! usr/bin/perl
use strict;
open (FILE,"wel.txt") or die "error in open wel.txt";
my $TSentences=0;
my $TWords=0;
my $TLetters=0;
my $AvgWordLength=0;
my $AvgSentenceLength=0;
while(my $line=<FILE>)
{
my @words=split(" ",$line);
my $nwords=@words;#no of words in that line
for(my $i=0;$i< $nwords;$i=$i+1)
{
my @letters=split("",$words[$i]);
my $nletters=@letters;
$TLetters=$TLetters+$nletters;
}
$TWords=$TWords+$nwords;
$AvgWordLength=$TLetters/$TWords;
}
print("Total Words:$TWords\n");
print("Total letters:$TLetters\n\n");
print("The average word length (in characters):$AvgWordLength\n ");
close(FILE);
open (FILE,"wel.txt") or die "error in open wel.txt";
while(my $ch=getc(FILE))
{
if($ch eq "." || $ch eq "!" || $ch eq "?")
{
$TSentences=$TSentences+1;
}
}
$AvgSentenceLength=$TWords/$TSentences;
print("Total sentences:$TSentences\n");
print("The average sentence length (in words):$AvgSentenceLength \n");
exit(0);
8. Program to count the frequency of words in text# Clear word hash%words = ();
print "What is the text you wish to analyze? \n";
print "Please include the filename and extension \n\n";
$textfile = <>;
# Read the filename from the keyboard inputchop $textfile;
# Remove line returnprint "Now analyzing lexical frequency in $textfile\n\n";
open text_in, "< $textfile";
while ($line = <text_in>) {
chomp($line);
# Remove line returns $line = lc($line);
# Change to lower case $line = ' ' . $line . ' ';
# Add spaces $line =~ s/["(),;:.!?]/ /g;
# Remove punctuation @words = split (" ", $line );
# Put words into an array foreach $word (@words) {
$words{$word} = $words{$word} + 1;
# Put word and word frequency in hash }
#end foreach word} #end while
close text_in;
# Display the results
foreach $word (sort keys %words) {
# Sort the word hash print "$word $words{$word}\n";
# Print word and frequency }