# பெர்ள்


**பெர்ள்** (*Perl*) ஒரு கணினி நிரலாக்க மொழி. இது ஒரு மேல் நிலை, இயங்கியல், படிவ நிரலாக்க மொழி வகையைச் சார்ந்தது. இதன் முதல் பதிப்பு 1987-ம் ஆண்டு *ஆக்கர் லாரி வோல்* (Larry Wall) என்பவரால் வெளியிடப்பட்டது. 1988 இல் இரண்டாவது பதிப்பும் 1989 இல் மூன்றாவது பதிப்பும் வெளியானது, பெர்ள் 6 விரைவில் வெளி வர இருக்கிறது. உரை ஆவணங்களை பகுப்பாய்வு செய்ய உதவும் சுருங்குறித்தொடர்களை பெர்ள் தொடக்கத்திலியே மொழியின் ஒரு கூறாக ஏதுவாக்கியது. உரை ஆவணப் பகுப்பாய்வு, கணினி நிர்வாகம், வலைப்பின்னல் நிரலாக்கம், தரவுதள வலை செயலிகள் வடிவமைப்பு போன்ற பல தேவைகளுக்கு பெர்ள் பயன்படுகிறது.  
இது ஒரு கட்டற்ற மென்பொருளாகும். குனு கட்டற்ற ஆவண உரிமத்தின் கீழும் வெளியிடப்படுகிறது.  

## மொழியின் பண்புகள்
இது சி, ஆக், செட், பேசிக் போன்ற பல நிரல் மொழிகளின் வசதிகளையும் தன்மைகளையும் உள்வாங்கி உருவாக்கப்பட்டது. இருப்பினும் எழுத்துத்தொடர்களை(*strings*) எளிதில் கையாளும் வசதிகள் மற்றும் ஒத்த மொழிகளில் இருந்த சில கட்டுக்கள் இல்லாதிருத்தல் ஆகியவற்றால் இது பெரிதும் பயன்படுத்தப்படத் துவங்கியது.  

பின்னர், இதன் கட்டற்ற தன்மையும் எவர் வேண்டுமானாலும் பங்களிக்கலாம் என்ற உரிமமும் அதற்கு வசதியான பகுதிக்கூறு கட்டமைப்பும் (*modular architecture*) இதை ஒரு வளர்ந்த மேம்பட்ட நிரல் மொழியாக உருமாற்றியது. தற்போது ஏறத்தாழ அனைத்து பெரிய நிறுவனங்களிலும் ஏதேனும் ஒரு வடிவில் இது பயன்படுத்தப்படுகிறது.  

இதன் உருவாக்குநர் மற்றும் துவக்க கால பங்களிப்போரின் சாய்வின் விளைவாக இது மனிதர்கள் பயன்படுத்தும் இயல்மொழிகளின் மொழியியலைப் பல இடங்களில் பின்பற்றுகிறது. அணிகள்கூட இதில் உண்டு! இதனாலும், "எளிதானவற்றை இன்னும் எளிமையாக்குதல், முடியாதவற்றையும் கூடச் செய்யுதல்" மற்றும் "எதையும் பல வழிகளில் நிறைவேற்றும் வசதி" போன்ற கொள்கைகளினாலும், இது சற்றே மாறுபட்டு நிற்கிறது. பொதுவாக நிரல்மொழிகள் "சொல்வதைச் செய்"யும் மொழிகளாக இருக்குமிடத்தில் பெர்ள் "சொல்ல விழைந்ததைச் செய்"யும் மொழியாக உள்ளது. இந்த நோக்கில் இதில் பல வசதிகள் உள்ளன. எடுத்துக்காட்டாக தாமாகவுயிர்ப்பித்தல் போன்ற வசதிகள் பிற நிரல்மொழிகளில் அரிது.  

### தொகுப்பி
பெர்ள் எளிமையான notepad, Crimson Editor போன்றவற்றிலும் தொகுக்கலாம் இருப்பினும் DzSoft Perl Editor போன்றவை கூடிய ஒத்துழைப்பு தரும். எடுத்துக்காட்டாக அவை ஒரு நிரலில் உள்ள தரவு இனங்களை, செயலிகளை இடப்பக்கக் கட்டத்தில் காட்டும். Regular expressions சோதனை செய்ய உதவும். மேலும் களை எடுக்கவும் உதவும்.  

## மொழி அமைப்பு
### தரவினங்கள்
பெர்ள் மொழியில் ஐந்து தரவு இனங்கள் பரவலாய பயன்படுகின்றன. அவையானவை  
- திசையிலிகள் (scalars)
- அணி (array)
- hash
- கோப்புப் பிடி - file handle
- செயலி - subroutine

<syntaxhighlight lang="perl">  
$foo # a scalar  
@foo # an array  
%foo # a hash  
FOO # a file handle  
&FOO # a constant (but the & is optional)  
&foo # a subroutine (but the & is optional)  
</syntaxhighlight>  

#### hash
<div>  
<pre>  
1. !/usr/bin/perl

my %req_command = (Make => 'Juniper',  
OS_type => 'JunOS',  
Data_req => 'Serial num',  
Command => 'Show chassis hardware details');  

my @hash_keys = keys (%req_command);  

foreach my $key (@hash_keys){  
my $value = $req_command{$key};  
print "$key => $value \n";  
}  
</pre>  
</div>  
<div>  
<pre>  
Command => Show chassis hardware details  
Data_req => Serial num  
OS_type => JunOS  
Make => Juniper  
</pre>  
</div>  

### தெரிவு

**if** ( *expr* ) *block*  
**if** ( *expr* ) *block* **else** *block*  
**if** ( *expr* ) *block* **elsif** ( *expr * ) *block* … **else** *block*  

**unless** ( *expr* ) *block*  
**unless** ( *expr* ) *block* **else** *block*  
**unless** ( *expr* ) *block* **elsif** ( *expr * ) *block* … **else** *block*  

### சுற்றுக்கள்
#### For சுற்று
<pre>  
for (starting assignment; test condition; increment)  
{  
code to repeat  
}  

1. எ.கா:

for ($i = 1; $i< 10; $i++){  
print $i;  
}  
</pre>  

#### While சுற்று
<pre>  
while (test condition)  
{  
code to repeat  
}  

1. எ.கா:

$i = 1;  
while ($i < 10){  
print $i;  
$1++;  
}  
</pre>  

#### For each சுற்று
<pre>  
foreach variable_name (array_name)  
{  
code to repeat  
}  

1. hash
%coins = ( "Quarter" , 25,  
"Dime" , 10,  
"Nickel", 5 );  

1. get the key value pair
foreach $key (sort keys %coins) {  
print "$key: $coins{$key}  
";  
}  

</pre>  

### செயலி
<pre>  
$a = 10;  
$b = 10;  

add($a, $b);  

sub add{  
$c = $a + $b;  
print "This sum is: \n";  
print $c;  
}  
</pre>  

### கோப்பைக் கையாளல்
#### வாசித்தல்
<pre>  
$file = "test_file.txt";  
open (FH_test_file, "<$file") or die "Cannot Open File \n";  

while ($line = <FH_test_file>){  
print $line, "  
";  
}  
close (FH_test_file);  
</pre>  

#### எழுதுதல்
<pre>  
$file = "test_file_b.txt";  
open (FH_test_file, ">$file") or die "Cannot Open File \n";  
print FH_test_file "This will be written to the file";  
close FH_test_file;  
</pre>  

### சுருங்குறித்தொடர்
#### பொருத்தி பார்
<pre>  
$test_string = "This is a test sentence";  
if ($test_string =~ m/test/i){  
print "yes";  
}  
</pre>  

#### மாற்றி பொருத்து
<pre>  
$test_string = "This is a test sentence";  
$test_string =~ s/e/**/g;  
print $test_string;  
</pre>  

## பெர்ள்ளில் பொருள் நோக்கு நிரலாக்கம்
### முதன்மை - testclass.pl
<pre>  
1. !/usr/bin/perl

1. Use the pacakge
use object_a;  

1. Define new insance of object_a
my $ob_a = new object_a;  

1. Intialize data values
$ob_a -> data1("abc");  
$ob_a -> data2("123");  

1. Print anc check
print $ob_a->data1;  
print "  
";  
print $ob_a->data2;  
print "  
";  

1. Use method1
$ob_a->method1("A Test print");  
</pre>  

### வகுப்பு object_a.pm
<pre>  
package object_a;  

1. Constructor
sub new {  
my ($class, %param) = @_;  

my ($self) = {  
_data1 => undef,  
_data2 => undef,  
};  
bless ($self, $class);  
return $self;  
}#END Constructor  

1. Accessor method for data1
sub data1 {  
my ($self, $data1) = @_;  
$self->{_data1} = $data1 if defined($data1);  
return $self->{_data1};  
};  
1. Accessor method for data2
sub data2 {  
my ($self, $data2) = @_;  
$self->{_data2} = $data2 if defined($data2);  
return $self->{_data2};  
};  
1. Method of object_a
sub method1 {  
my ($self, $log_data) = @_;  
print $log_data;  
}  
1;  
</pre>  

### வெளியீடு
<pre>  
abc  
123  
A Test print  
</pre>  

## இதர தகவல்கள்
### உள்ளமைவு கோப்பு
ஒவ்வொரு மென்பொருளுக்கும் அதற்கான உள்ளமைவு கோப்பை உருவாக்குவது நன்று.  

projectConfig.pm  
<pre>  
package projectConfig;  

$projectConfig::var1 = "data123";  
$projectConfig::var2 = "data456";  
</pre>  

பயன்படுத்தல்  
<pre>  
1. !/usr/bin/perl
use projectConfig;  

$configdata = $projectConfig::var1;  
print $configdata;  
</pre>  

## மேற்கோள்களும் குறிப்புகளும்