Добавлен: 20.10.2018
Просмотров: 994
Скачиваний: 3
”thursday”,”freday”,”saturday”,”sunday”);
print(“Какой по счету сегодня день недели?”);
$day = <STDIN>;
chop $day;
print (“Today is a ”, @week[$day]);
Помимо операторов цикла while или until можно использовать другую полезную технику на основе оператора do с проверкой условия в конце цикла.
#!/usr/local/bin/perl
do
{
"Password? "; # Спрашивается пароль
$a = <STDIN>; # Вводится пароль
chop $a; # Убирается символ newline
}
while ($a ne "fred")
# Выполнять до тех пор пока неверный пароль
Контрольное задание
1. Перепишите программу Hello world таким образом, чтобы в переменной a был записан печатаемый текст, а в переменной b - управляющий символ перехода на новую строку. Используйте двойные кавычки, но не используйте оператор конкатенации.
2. Выполнить любое задание по условным операторам, использующим if/elsif /else, из лабораторной работы 4, используя язык Perl.
3. Проверьте каждый из изученных способов печати на созданном Вами массиве.
4. Создайте небольшой массив и отсортируйте его элементы в прямом и обратном порядке.
5. Структура until в Perl похожа на структуру until в C. Перепишите программу, использующую оператор while, применяя until. Выполнение блока повторять до тех пор, пока выражение не станет верно, в while использовалась проверка на неравенство.
6. Посчитать значение факториала числа 8.
7. Модифицируйте программу раздела о поддержке файлов так, чтобы она печатала в конце каждой строки символ@.
8. Составьте свои программы на основе следующих примеров-фрагментов сценариев(sub - подпрограмма):
Пример 1. Определение и вызов процедуры.
sub marine {
$n += 1; #Глобальная переменная $n
print “Hello, sailor number $n!\n”;
}
&marine; # содержит сообщение Hello, sailor number 1!
&marine; # содержит сообщение Hello, sailor number 2!
&marine; # содержит сообщение Hello, sailor number 3!
&marine; # содержит сообщение Hello, sailor number 4!
Пример 2. Программа, использующая подпрограмму сложения двух переменных.
sub sum_of_fred_and_barney {
print “Вы вызвали процедуру sum_of_fred_and_barney!\n”;
$fred + $barney; #Возвращаемое значение
}
$fred = 3;
$barney = 4;
$c = &sum_of_fred_and_barney; # $c получает 7
print “\$c равно $c.\n”;
$d = 3 * &sum_of_fred_and_barney; #$d получает 21
print “\$d равно $d.\n”;
Пример 3. «Последнее вычисляемое значение»
sub larger_of_fred_and_barney {
if ($fred > $barney) {
$fred;
} else {
$barney;
}
}
$fred = 3;
$barney = 4;
$c = &larger_of_fred_and_barney; # $c получает 4
print “\$c равно $c.\n”;
Пример 4. Формирование интервала чисел.
sub list_of_fred_and_barney {
if ($fred < $barney) {
# Формирует интервал чисел от $fred до $barney (по возрастанию)
$fred..$barney;
} else {
# Формирует интервал чисел от $fred до $barney (по убыванию)
reverse $barney..$fred;
}
}
$fred = 11;
$barney = 6;
@c = &list_of_fred_and_barney;
# Массив @c получает значения 11, 10, 9, 8, 7, 6
Пример 5. Работа с аргументами.
sub max {
if ($_[0] > $_[1]) {
$_[0];
} else {
$_[1];
}
}
$c = &max(10, 15); # Запишет 15
$d = &max(5, 4, 10);
# Проигнорирует третий параметр и запишет 5
Пример 6. Усовершенствованная процедура &max.
$maximum = &max(3, 5, 10, 4, 6);
sub max {
my($max_so_far) = shift @_;
#присваиваем индивидуальной переменной $max_so_far
#значение первого параметра и удаляем его из массива
foreach (@_) {
If ($_ > $max_so_far) {
$max_so_far = $_;
}
}
$max_so_far;
}
Пример 7. Рекурсивная процедура просмотра дерева каталогов.
sub tree {
local (*ROOT);
my ($root)=$_[01;
opendir ROOT, $root;
my (@filelist) = readdir ROOT;
closedir ROOT;
for $x (gfilelist) {
if ($x ne "." and $x ne ".."){
$x=$root."/".$x;
print " $x\n" if (-f $x);
if (-d $x) {
print "$x:\n";
tree($x);
}
}
}
}
Пример 8. Нахождение наименьшего общего кратного НОК и наибольшего общего делителя НОД двух чисел.
sub nod {
my($tmp);
$tmp = $_[1] % $_[0];
if ($_[0] != 0) {
nod($tmp, $_[0]);
} else {
$_[1];
}
}
sub nok {
my($tmp) = nod($_[0], $_[1]);
$_[1] * ($_[0]- $_[0] % $tmp) / $tmp;
}
$a = $ARGV[0];
$b = $ARGV[1];
$c = nod($a, $b);
$d = nok($a, $b);
print “НОК $a и $b = $d, а НОД $a и $b = $c”;
Пример 9. Секретный код.
my $secret = int(1 + rand 100);
# “секретным считается число $secret.\n”;
while (1) {
print “Пожалуйста, введите число из диапазона от 1 до 100: ”;
chomp(my $guess = <STDIN>);
if ($guess =~ /quit|exit|^\s*$/i) {
print “Вы сдались. Секретным числом было $secret.\n”;
last;
} elsif ($guess < $secret) {
print “Слишком малое. Попробуйте еще раз!\n”;
} elsif ($guess == $secret) {
print “Вы угадали!\n”;
last;
} else {
print “Слишком большое. Попробуйте еще раз!\n”;
}
}
Пример 10.
#!/usr/bin/perl
package Staff;
sub new {
my ($class, $data) = @_;
my $self = $data;
bless $self, $class;
return $self;
}
sub setdata {
my ($self,$data) = @_;
for $i (keys %$data) {
$self->{$i}=$data->{$i};
}
return $self;
}
sub showdata {
my $self = shift;
my @keys = @_ ? @_ : sort keys %$self;
fоreach $key (@keys) {
print "\t$key => $self->{$key}\n";
}
return $self;
Лабораторное задание и порядок выполнения работы
-
Изучить материал, выполняя рекомендуемые примеры и задания.
-
Выполнить контрольное задание, используя свои файлы и каталоги. Возможны добавления в сценарии.
-
Кратко законспектировать материал по новым командам.
Оформить отчет и защитить работу.
Требования к отчету
Отчет должен содержать:
-
Краткие сведения о работе.
-
Описание команд и сценариев, выполненных в данной работе (с Вашими именами файлов и каталогов).