1. Копирование файлов по маске
Для копирования файлов по маске в Perl можно использовать модуль File::Copy.
Пример кода:
use strict;
use warnings;
use File::Copy;
my $dir = '/path/to/directory';
my @files = glob("$dir/*.txt"); # выбор файлов по маске
foreach my $file (@files) {
my $new_file = $file . '_copy'; # новое имя файла
copy($file, $new_file) or die "Ошибка копирования файла $file: $!"; # копирование файла
}
В данном примере мы выбираем все файлы с расширением .txt из директории /path/to/directory и копируем каждый из них, добавляя к имени файла суффикс '_copy'. Если происходит ошибка копирования, скрипт выводит сообщение об ошибке.
2. Поиск файлов по маске
Для поиска файлов по маске в Perl можно использовать модуль File::Find::Rule.
Например, для поиска всех файлов с расширением .txt в директории и ее поддиректориях можно использовать следующий код:
use File::Find::Rule;
my @files = File::Find::Rule->file()
->name('*.txt')
->in('/path/to/directory');
Данный код создает объект File::Find::Rule, который ищет только файлы (исключая директории) с расширением .txt в указанной директории и всех ее поддиректориях, и сохраняет их в массив @files.
Также возможно использование регулярных выражений для более сложных масок.
Например, для поиска файлов, начинающихся на букву "a" и содержащих цифры в директории и ее поддиректориях, можно использовать следующий код:
use File::Find::Rule;
my @files = File::Find::Rule->file()
->name(qr/^a.*\d/)
->in('/path/to/directory');
Здесь вместо строки '.txt' в методе name используется регулярное выражение, начинающееся со строки 'a', содержащей любое количество символов (.*), и заканчивающееся цифрами (\d).
3. Работа с содержанием файла
Для чтения содержимого файла на Perl используется функция `open` в режиме чтения ("`<`"):
open(my $input_file, '<', 'имя_файла') or die "Не удалось открыть файл: $!";
Затем можно прочитать содержимое файла в переменную с помощью функции `readline`:
my $text;
while (my $line = readline $input_file) {
$text .= $line;
}
Далее можно обработать текст, например, заменить все буквы на заглавные:
$text = uc $text;
Наконец, результат можно сохранить в другой файл с помощью функции `open` в режиме записи ("`>`"):
open(my $output_file, '>', 'имя_файла') or die "Не удалось создать файл: $!";
print $output_file $text;
close $output_file;
В итоге полный код будет выглядеть примерно так:
open(my $input_file, '<', 'имя_файла') or die "Не удалось открыть файл: $!";
my $text;
while (my $line = readline $input_file) {
$text .= $line;
}
close $input_file;
$text = uc $text;
open(my $output_file, '>', 'имя_файла') or die "Не удалось создать файл: $!";
print $output_file $text;
close $output_file;
4. Информация о файле
Для получения информации о файлах в Perl можно использовать функции модуля File::stat.
Например, чтобы получить размер файла и его дату создания:
use File::stat;
my $filename = 'myfile.txt';
my $file_stat = stat($filename);
if ($file_stat) {
my $size = $file_stat->size;
my $created = $file_stat->ctime;
print "File $filename size: $size bytes, created: $created\n";
} else {
print "File $filename not found\n";
}
Функция stat возвращает объект, содержащий информацию о файле. Методы этого объекта позволяют получать различную информацию о файле: размер, дату создания, дату последнего изменения и т.д.
Для получения списка файлов в директории можно использовать функцию модуля File::Slurper.
Например, чтобы получить список всех файлов в директории:
use File::Slurper qw(read_dir);
my $dir = '/path/to/directory';
my @files = read_dir($dir);
foreach my $file (@files) {
print "$file\n";
}
5. Простой редактор работы с файлами
Напишем простой редактор работы с файлами на языке Perl:
#!/usr/bin/perl
# Получаем имя файла из аргументов командной строки
$file = $ARGV[0];
# Если файл не существует, то создаем его
if (! -e $file) {
open(FILE, "> $file");
close(FILE);
}
# Запускаем цикл редактирования файла
while (1) {
# Читаем содержимое файла
open(FILE, "< $file");
@lines = <FILE>;
close(FILE);
print "File: $file\n";
# Выводим содержимое файла на экран
foreach $line (@lines) {
print $line;
}
# Считываем команду от пользователя
print "\nCommand (q=quit, s=save): ";
$command = <STDIN>;
chomp($command);
# Разбираем команду пользователя
if ($command eq "q") {
# Выходим из редактора
last;
}
elsif ($command eq "s") {
# Сохраняем файл
open(FILE, "> $file");
foreach $line (@lines) {
print FILE $line;
}
close(FILE);
}
else {
# Редактируем файл
print "Input new line: ";
$newline = <STDIN>;
chomp($newline);
push(@lines, $newline);
}
}
Этот редактор позволяет открывать файлы, редактировать их содержимое, сохранять изменения и выходить из редактора.
Для запуска редактора необходимо вызвать скрипт с передачей имени файла, например: `perl editor.pl test.txt`. Если файл не существует, он будет создан автоматически.
Для добавления новой строки в файл необходимо ввести любую другую команду, кроме `q` и `s`. Новая строка будет добавлена в конец файла.
Для выхода из редактора необходимо ввести команду `q`.
Для сохранения изменений необходимо ввести команду `s`. Это перезапишет содержимое файла, используя измененную версию.
Это простой редактор, который можно легко расширить, добавив новые команды и функции.
6. Поиск файла по содержанию
Для поиска файлов по содержанию я буду использовать функцию `grep`, которая позволяет искать элементы в массиве, а также функции `opendir` и `readdir`, которые позволяют открывать и читать содержимое директории.
Код:
#!/usr/bin/perl
use strict;
use warnings;
my $dir = '.'; # директория, которую нужно просканировать
my $search_term = 'example'; # строка для поиска
opendir(my $dh, $dir) or die "Cannot open directory $dir: $!";
while (my $file = readdir($dh)) {
next if ($file =~ /^\./); # пропустить скрытые файлы и директории
next unless (-f "$dir/$file"); # пропустить не файлы
my $contents;
open(my $fh, '<', "$dir/$file") or next; # если нельзя открыть файл, продолжить дальше
{
local $/;
$contents = <$fh>; # считать содержимое файла
}
close($fh);
if (grep /$search_term/, $contents) {
print "$file\n"; # если строка найдена, вывести имя файла
}
}
closedir($dh);
Как это работает:
- Переменные `$dir` и `$search_term` задаются в начале.
- С помощью функции `opendir` открывается директория `$dir`.
- Цикл `while` проходит по содержимому директории, пропуская скрытые файлы и директории, и обрабатывает только обычные файлы.
- Для каждого файла открывается файловый дескриптор, чтобы считать его содержимое.
- Содержимое файла считывается с использованием функции `local $/` и сохраняется в переменной `$contents`.
- Функция `grep` проверяет, есть ли `$search_term` в `$contents`. Если есть, то имя файла выводится на экран.
- Директория закрывается с помощью функции `closedir`.
6. Простой бэкап файла
Для создания бэкапа файлов в Perl можно использовать функцию `File::Copy::copy`. Например, для создания копии файла `my_file.txt` с добавлением даты к имени файла можно использовать следующий код:
use File::Copy;
my $file = 'my_file.txt';
my $backup_dir = 'backup/';
my $timestamp = localtime(time);
$timestamp =~ s/[:\s]/_/g;
my $backup_file = $backup_dir . $file . '.' . $timestamp;
copy($file, $backup_file) or die "Copy failed: $!";
В этом примере мы используем модуль `File::Copy`, чтобы скопировать файл `my_file.txt` в папку `backup/` с новым именем, содержащим дату и время в формате `YYYY_MM_DD_HH_MM_SS`. Если копирование не удалось, программа выводит сообщение об ошибке.
7. Работа с MS Word (файлы документов)
Код Perl для работы с word:
use Win32::OLE; # подключаем Win32::OLE для работы с объектами OLE
use Win32::OLE::Const 'Microsoft Word'; # подключаем константы Microsoft Word
# создаем объект приложения Microsoft Word
my $word = Win32::OLE->new('Word.Application');
# устанавливаем visible в значение true для отображения приложения
$word->{visible} = 1;
# создаем новый документ
my $document = $word->Documents->Add();
# устанавливаем текст в документе
my $range = $document->Content();
$range->InsertAfter("Hello, world!");
# сохраняем документ
$document->SaveAs("C:\\path\\to\\document.docx");
# закрываем документ
$document->Close();
# закрываем приложение Microsoft Word
$word->Quit();
Работа с MS Excel (файлы таблиц)
В Perl можно использовать модули для работы с Excel, такие как Spreadsheet::ParseExcel, Spreadsheet::WriteExcel и Excel::Writer::XLSX.
Пример кода для чтения Excel-файла с помощью модуля Spreadsheet::ParseExcel:
use strict;
use warnings;
use Spreadsheet::ParseExcel;
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('example.xls');
if ( !defined $workbook ) {
die $parser->error(), "\n";
}
for my $worksheet ( $workbook->worksheets() ) {
printf( "Sheet: %s\n", $worksheet->name() );
for my $row ( $worksheet->min_row() .. $worksheet->max_row() ) {
for my $col ( $worksheet->min_col() .. $worksheet->max_col() ) {
my $cell = $worksheet->get_cell( $row, $col );
next unless $cell;
printf( "(%s,%s) => %s\n", $row, $col, $cell->value() );
}
}
}
Пример кода для создания Excel-файла с помощью модуля Excel::Writer::XLSX:
use strict;
use warnings;
use Excel::Writer::XLSX;
my $workbook = Excel::Writer::XLSX->new('example.xlsx');
my $worksheet = $workbook->add_worksheet();
$worksheet->write( 'A1', 'Hello' );
$worksheet->write( 'B1', 'World' );
$worksheet->write( 'C1', 42 );
$workbook->close();
Это только базовые примеры. Модули для работы с Excel позволяют делать более сложные операции, такие как форматирование, объединение ячеек, создание графиков и т.д.
8. Работа с каталогами
Для работы с каталогами в Perl используется модуль File::Path. Этот модуль автоматически создает все необходимые директории.
Вот пример кода Perl для создания и удаления каталогов:
use File::Path;
# создание каталога
my $dir = "/path/to/dir";
mkpath($dir) or die "Не удалось создать каталог $dir: $!";
# удаление каталога
rmtree($dir) or die "Не удалось удалить каталог $dir: $!";
Функция mkpath() создает все промежуточные директории, если они отсутствуют. Функция rmtree() удаляет директорию и все ее содержимое.
Функции mkpath() и rmtree() могут сгенерировать ошибки, поэтому рекомендуется использовать операторы die для обработки ошибок.
Также в Perl есть множество других функций для работы с каталогами, таких как opendir(), readdir(), closedir(), chdir() и другие. Они позволяют открывать каталог, перебирать его содержимое, изменять текущий каталог и выполнять другие операции.