[[:oktatas:programozás:perl|< Perl]]
====== Perl példák ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2011, 2014, 2015, 2016, 2018, 2020
* Licenc: GNU Free Documentation License 1.3
* Web: http://szit.hu
===== HTML oldal előállítása =====
#!/usr/bin/perl
print "Content-Type: text/html; charset=utf-8\n";
print "X-Custom-Header-1: foobar\n\n";
===== A rendszernapló írása =====
A rendszernaplóba akár felhasználóként is írhatunk alapesetben a
Debian GNU/Linuxos rendszerekben.
Perl nyelven ehhez szükség van a liblogger-syslog-perl nevű csomagra,
telepítsük fel:
apt-get install liblogger-syslog-perl
Telepítés után a következő programot írhatjuk:
use Sys::Syslog;
openlog("sajatbjegyzes", $logopt, facility);
syslog("info|local0", "Itt az üzenet");
closelog();
===== Karakterek kezelése =====
Kisbetűssé:
lc($str);
Nagybetűssé:
uc($str);
===== POP3 szerver =====
#!/usr/bin/perl
use Net::POP3;
$host = 'szervercime';
$user = 'joe';
$pass = 'titok';
$pop = Net::POP3->new($host);
$pop = Net::POP3->new($host, Timeout => 60);
if($pop->login($user, $pass)> 0)
{
my $msgnums = $pop->list;
foreach my $msgnum (keys %$msgnums)
{
my $msg = $pop->get($msgnum);
print @$msg;
print "\n\n=============================================================\n\n";
}
}
$pop->quit;
===== IMAP szerver =====
apt-get install libnet-imap-simple-perl
#!/usr/bin/perl
use Net::IMAP::Simple;
$host = 'servercim';
$user = 'joska';
$pass = 'titok';
$server = new Net::IMAP::Simple($host);
$server->login($user, $pass);
$msgnums = $server->select('INBOX');
foreach $msgnum (1..$msgnums)
{
if($server->seen($msgnum))
{
print "Olvasott üzenet! $msgnum\n";
}
else
{
print "\n----------Olvastalan-----------\n";
$lines = $server->get($msgnum);
print @$lines;
}
}
===== E-mail küldés =====
#!/usr/bin/perl
$to='valaki@zold.and';
$from= 'masvalaki@piros.and';
$subject='Teszt levél';
open(MAIL, "|/usr/sbin/sendmail -t");
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
print MAIL "Az üzenetünk\n";
close(MAIL);
#!/usr/bin/perl
use Mail::Send;
$to = 'valaki@piros.and';
$form = 'masvalaki@zold.and';
$subject = 'Teszt level 002';
$body = "A level.";
$msg = new Mail::Send Subject=>$subject, To=>$to;
$fh = $msg->open;
print $fh $body . "\n";
$fh->close;
===== Unicode =====
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
binmode(STDOUT, ":utf8");
print "\x{7a7a}\x{624b}\n";
print codepoint_hex("空") . " " . codepoint_hex("手") . "\n";
sub codepoint_hex
{
return sprintf "%4x", ord Encode::decode("UTF-8", shift);
}
* A binmod() függvény hatására a perl programnak nem probléma a egy Unicode karakter
* A következő sor kiírja a unicode alapján a karaktert
* A következő sor a karakter alapján kiírja a karakter kódpontját
* A program végén van a kódpontot visszaadó függvény
===== Könyvtár olvasása =====
#!/usr/bin/perl
# Fájlok tartalmának kiírása
chdir ("data") or die "$!";
opendir (DIR, ".") or die "$!";
my @files = grep {/.*\.txt/} readdir DIR;
close DIR;
{
local @ARGV = @files;
while(<>)
{
print $_;
}
}
#!/usr/bin/perl
# Fájlok tartalmának kiírása
chdir ("data") or die "$!";
opendir (DIR, ".") or die "$!";
my @files = grep {/.*\.txt/} readdir DIR;
close DIR;
foreach my $file (@files)
{
open(FILEH,"$file") or die "$!";
while()
{
print $_;
}
close(FILEH);
}
#!/usr/bin/perl
# Fájlok tartalmának kiírása
use File::Find;
my $dir = "data";
find(\&csinal, $dir);
sub csinal
{
print $_ . "\n";
}
===== Curl =====
#!/usr/bin/perl
my $html=`curl http://egressy.eu/helyettesites/subst_left.htm`;
print $html;
my $dom = Mojo::DOM->new;
$dom->parse($html);
my $skip;
for my $dd ($dom->find('dd[class*="message"]')->each) {
print $dd->attrs->{id}, "\n" if $skip++;
}
===== Használat parancssorból =====
A perl értelmezőt használhatjuk parancssorból is.
Ha egy perl modult szeretnénk használni, mint a MIME::Base64,
akkor azt a -M kapcsolóval így adjuk meg:
perl -MMIME::Base64 -e 'print encode_base64("joska");'
A példában a "joska" felhasználónevet szeretnénk base64 kódolni.
===== Sütiszörny =====
A cookie.pl, azaz a Cookie Monster magyar változata.
#!/usr/bin/env perl -w
#
# Sütiszörny
$suti = "";
while ($suti ne 'süti') {
print 'Kérek egy sütit: ';
chomp($suti = );
}
print "Hmmm, ez igen. Finom süti\n";
===== Excel írása =====
apt-get install libexcel-writer-xlsx-perl
use Excel::Writer::XLSX;
my $workbook = Excel::Writer::XLSX->new( 'valami.xlsx');
my $worksheet = $workbook->add_worksheet();
$worksheet->write(0, 0, "No");
$worksheet->write(0, 1, "Nev");
$worksheet->write(0, 2, "Orzok");
use Excel::Writer::XLSX;
use utf8;
my $workbook = Excel::Writer::XLSX->new( 'valami.xlsx');
my $worksheet = $workbook->add_worksheet();
$worksheet->write(0, 0, "No");
$worksheet->write_string(0, 1, "Név");
$worksheet->write(0, 2, "Őrzők");
===== LibreOffice Calc olvasása =====
apt install libspreadsheet-read-perl
binmode(STDOUT, ":utf8");
use Spreadsheet::Read qw(ReadData);
my $book = ReadData ('fajl.ods');
print $book->[1]{B6} . "\n";
===== Jelszó bekérése =====
#!/usr/bin/perl
use Term::ReadKey;
print "Jelszó: ";
ReadMode('noecho');
chomp(my $pass = );
ReadMode(0);
Felhasználónévvel:
#!/usr/bin/perl
use Term::ReadKey;
print "Felhasználónév: ";
chomp(my $user = );
print "Jelszó: ";
ReadMode('noecho');
chomp(my $pass = );
ReadMode(0);
print("\n");
if($user eq "vki" && $pass eq "titok") {
print("Ok\n");
}else {
print("Nem jó\n");
}
===== Számok =====
Számrendszerek:
$szam = 145; # decimális
$szam = 0b0101 # bináris szám
$szam = 0241 # oktális szám
$szam = 0xb4 # hexadecimális
$szam = "145"; # szám szövegként
$szam = 142.123*e-18; # tudományos alak
$szam = "-15.123e18; # tudományos alak szövegként
===== Irodalom =====
* http://perldoc.perl.org/Sys/Syslog.html
* http://perldoc.perl.org/Net/POP3.html
* http://perldoc.net/Net/IMAP/Simple.pm
* http://search.cpan.org/~jpaf/Net-IMAP-Simple-0.93/Simple.pm