Perl
Подпрограммы
Вместо слова "функция" в perl используется слово "подпрограмма" (subroutine). По-этому определение функции начинается со слова sub.sub func1{ return 0; }
Внутри подпрограммы для объявления пременных используется ключевое слово my. Оно говорит, что переменная ограничена текущим блоком (или подпрограммой).
sub func1{
my $content = "a";
return $content;
}
print func1();
Если у функции нет аргументов, то её можно вызвать, опуская скобки:my $content = "a";
return $content;
}
print func1();
print func1;
Переменные
переменная начинается с $, массив с @, а хэш с %т.е. $v, @v и %v это разные вещи
$_
$_ — переменная по умолчанию, создаётся в циклах видаforeach(@array){ .. }
т.е. цикл полностью выглядит как foreach $_(@array){ do smth with $_ ; }
@_
@_ — это массив аргументов подпрограммыиспользуется примерно так:
sub f {
my ($var1, $var2)=@_;
...
}
или так:my ($var1, $var2)=@_;
...
}
sub f {
my $x=shift || "значение по умолчанию переменной x"
..
}
my $x=shift || "значение по умолчанию переменной x"
..
}
или так:
sub f {
my $x=shift or die "incorrect use of function f";
my $y=shift || "0";
}
в этом случае первая переменная обязательна, вторая нетmy $x=shift or die "incorrect use of function f";
my $y=shift || "0";
}
про остальные переменные типа $/, $] и т.д. можно почитать в perldoc perlvar или perl5doc.ru/perlvar-table
Операторы
print "string", @a;or и || отличаются приоритетом, если расставить скобки то получится:
(my $x=shift) or die ...
my $y=(shift || "0");
my $y=(shift || "0");
if
$true = 1;if ($true){ ## входим, если условие выполняется
print "ага";
}
unless ($true){ ## если условие не выполняется
print "неа";
}
Модули
В Perl реализован механизм модулей. Подпрограммы и переменные объединяются в модули. Модули импортируются функцией use:use имя_модуля;
Типы данных
Массив (список)
@days = (' Sun ' ,' Mon ',' Tue ',' Wed ',' Thu ',' Fri ',' Sat ');print @days;
print @days[1];
print @days[1..5];
Хэш (словарь)
%hash1 = (
'k1' ,'v1', ## на мой взгляд, несколько странный способ записи.
'k2','v2',
'k3','v3' );
print $hash1{'k2'}, '<br>';
$hash1{'k4'} = 'v4';
print %hash1;
и можно использовать привычный способ записи:'k1' ,'v1', ## на мой взгляд, несколько странный способ записи.
'k2','v2',
'k3','v3' );
print $hash1{'k2'}, '<br>';
$hash1{'k4'} = 'v4';
print %hash1;
%hash1 = (
'k1' => 'v1',
'k2'=>'v2',
'k3'=>'v3' );
'k1' => 'v1',
'k2'=>'v2',
'k3'=>'v3' );
проверить наличие ключа в массиве:
if ( exists( $_POST{'page'} ){
print "ключ page существует";
}
print "ключ page существует";
}
Build-in functions
shift
Функция shift вытаскивает первый элемент из массива и возвращает его. Если функция вызвана без аргументов в теле основной программы, то она берёт первый элемент массива @ARGV, если вызвана из "подпрограммы", то берёт перый элемент массива @_Файлы и папки
чтение файла
open(FH, "<$filename") or die $!;
while(<FH>)
{
$content .= $_;
}
close(FH);
while(<FH>)
{
$content .= $_;
}
close(FH);
список функций
удаление | $DB_FILE = "img.db"; unlink($DB_FILE) or die "Can't delete '$DB_FILE': $!\n"; Если файл не существует - возникнет ошибка.unlink может получить на вход список файлов. |
проверить существование | $DB_FILE = "img.dbs"; unless (-e $DB_FILE){ print "файл не существует"; } |
Модули
Digest
Модуль, в котором находятся функции вычисления различных хэшей.use Digest::MD5 qw(md5 md5_hex);
print md5_hex('dd');
Web
Вывести ошибки в браузер:use CGI::Carp qw(fatalsToBrowser);
$_POST
sub populatePostFields {%_POST = ();
read( STDIN, $tmpStr, $ENV{ "CONTENT_LENGTH" } );
@parts = split( /\&/, $tmpStr );
foreach $part (@parts) {
( $name, $value ) = split( /\=/, $part );
$value =~ ( s/%23/\#/g );
$value =~ ( s/%2F/\//g );
$_POST{ "$name" } = $value;
}
}
&populatePostFields;
print $_POST{"env"};
Скачивание файла частями
положим, нам надо скачать файл от начала, до 100 байтаuse LWP::UserAgent;
$ua = LWP::UserAgent->new;
$res = $ua->get( "http://localhost/img/2.png", 'Range', 'bytes=0-100' );
print $res->content;
$ua = LWP::UserAgent->new;
$res = $ua->get( "http://localhost/img/2.png", 'Range', 'bytes=0-100' );
print $res->content;
Работа с БД
DBI
DBI - это стандартный интерфейс для работы с БД.SQLite
Надо скачать модуль для работы с SQLite: search.cpan.org/<...>/SQLite.pm
и просто положить рядом со своим pl-скриптом.use DBI;
$db = DBI->connect("dbi:SQLite:dbname=users.db","",""); # Подключаемся к базе данных. Если файла users.db не существует, то он будет создан автоматически
$db->do("create table users (user_name text);"); # Создаем новую таблицу в базе данных
$db->disconnect;
$db = DBI->connect("dbi:SQLite:dbname=users.db","",""); # Подключаемся к базе данных. Если файла users.db не существует, то он будет создан автоматически
$db->do("create table users (user_name text);"); # Создаем новую таблицу в базе данных
$db->disconnect;
Полезные функции
file_get_contents
sub file_get_contents
{
my $filename = shift;
my $content = "";
open(FH, "<$filename") or die $!;
while(<FH>)
{
$content .= $_;
}
close(FH);
return $content;
}
{
my $filename = shift;
my $content = "";
open(FH, "<$filename") or die $!;
while(<FH>)
{
$content .= $_;
}
close(FH);
return $content;
}
Комментариев нет:
Отправить комментарий