[[: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