Эта клиентская программа получила имя gabl.pl, поскольку она является первой из ряда таких клиентов. Пример простой, но неправильной реализации клиента gab
0: #!/usr/bin/perl
1: # Файл: gabl.pl
2: # Предупреждение: Это - неработоспособный сценарий
3: use Strict;
4: use IO::Socket qw(:DEFAULT :crlf);
5: my $host = shift or die "Usage: gabl.pl host [port]n";
6: my $port = shift 'echo';
7: my $socket = IO::Socket::INET->new(PeerAddr=>$host, PeerPort => $port)
8: or die "Can't connect: $!";
9: my ($from_server, $from_user) ;
10: LOOP:
11: while (i) {
12: { # Ограничить область действия переменной $/
13: local $/ - CRLF;
14: last LOOP unless $from_server = <$socket>;
15: chomp $from_server;
16: }
17: print $from_server, "n";
18: last unless $from_user = <>;
19: chomp ($from_user) ;
20: print $socket $from_user,CRLF;
21: }
Проведем анализ программы.
Строки 1-6. Инициализация модуля. Как и прежде, выполняется загрузка модуля IO::Socket и выборка требуемого имени удаленного хоста и номера порта из параметров командной строки.
Строки 7,8. Создание сокета. С помощью метода IO::Socket:: INET->new () создается сокет, а в случае неудачного завершения вызывается функция die с сообщением об ошибке.
Строки 9-21. Вход в главный цикл. Программа входит в цикл. При каждом проходе по циклу считывается одна строка из сокета и выводится в стандартное устройство вывода. Затем считывается строка, введенная пользователем, и выводится в сокет.
Поскольку удаленный сервер для обозначения конца каждой строки использует пары символов. crlf, а пользователь выводит обычные символы конца строки, приходится постоянно устанавливать и переустанавливать значение переменной $/.