Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:perl:perl_mintak

< Perl

Perl példák

  • Szerző: Sallai András
  • Copyright © Sallai András, 2011, 2014, 2015, 2016, 2018, 2020
  • Licenc: GNU Free Documentation License 1.3

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:

main.pl
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

main.pl
#!/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
main.pl
#!/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

sendmail.pl
#!/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);
sendmail2.pl
#!/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

main.pl
#!/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

main.pl
#!/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 $_;
	}
}
main.pl
#!/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(<FILEH>)
	{
		print $_;
	}
	close(FILEH);
}
main.pl
#!/usr/bin/perl
# Fájlok tartalmának kiírása
 
use File::Find;
 
my $dir = "data";
 
 
find(\&csinal, $dir);
 
sub csinal
{
	print $_ . "\n";
}

Curl

main.pl
#!/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.

suti.pl
#!/usr/bin/env perl -w
#
# Sütiszörny
 
$suti = "";
 
while ($suti ne 'süti') {
	print 'Kérek egy sütit: ';
	chomp($suti = <STDIN>);
}
 
print "Hmmm, ez igen. Finom süti\n";

Excel írása

apt-get install libexcel-writer-xlsx-perl
exceliras.pl
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");
excelEkezetIras.pl
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
calcFileRead.pl
binmode(STDOUT, ":utf8");
use Spreadsheet::Read qw(ReadData);
my $book = ReadData ('fajl.ods');
 
print $book->[1]{B6} . "\n";

Jelszó bekérése

jelszo.pl
#!/usr/bin/perl
 
use Term::ReadKey;
 
print "Jelszó: ";
ReadMode('noecho');
chomp(my $pass = <STDIN>);
ReadMode(0);

Felhasználónévvel:

userpass.pl
#!/usr/bin/perl
 
use Term::ReadKey;
 
print "Felhasználónév: ";
chomp(my $user = <STDIN>);
 
print "Jelszó: ";
ReadMode('noecho');
chomp(my $pass = <STDIN>);
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

oktatas/programozas/perl/perl_mintak.txt · Utolsó módosítás: 2020/06/25 09:17 szerkesztette: admin