0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 13

Переменные с двумя символами доллара ($$)

20.10.2011, 20:28. Показов 2248. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Задали лабу, вот задание: Разработать программу просмотра дерева каталогов и формирования отчета, в котором находятся имена файлов, содержащих заданную последовательность символов, а также счетчик числа таких последовательностей, обнаруженных в каждом из перечисленных файлов. Последовательность символов вводится с клавиатуры или через командную строку. Предусмотреть возможность вызова программы в двух режимах:
— с учетом регистра;
— без учета регистра.
В качестве корня дерева использовать каталог, имя которого вводится пользователем.

Код:

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/perl -w
 
 
use Cwd;       
my($case, $node, $sampl, $temp);
 
 
unless ($node) {
    print"введите название каталога: ";
    chomp($node = <STDIN>);
} else { $node = $ARGV[0]; }
 
unless ($sampl) {
    print"введите последовательность символов: ";
    chomp($sampl = <STDIN>);
} else { $sampl = $ARGV[1]; }
 
unless ($case) {
    print"учитывать регистр (y/n): ";
    chomp($case = <STDIN>);
    if ($case eq 'y') { $case = 1; }
    else { $case = undef; }
}
 
unless ($ARGV[2]) {
    print"введите название результирующего файла: ";
    chomp($temp = <STDIN>);
    open RESOUT, ">$temp" || die "не могу открыть файл: $!\n"; 
} else {
    open RESOUT, ">$ARGV[2]" || die "не могу открыть файл $ARGV[2]: $!\n";
}
 
search_sampl(\$node, \$sampl, \$case);
close RESOUT;
 
sub search_sampl { 
    my($pnode, $psamp, $pcase) = @_;
    my(@files, $f_cur);
        my($ch, @result, $str);
        my($cur_dir, $path);
        
    opendir DIR, $$pnode;
        @files = readdir DIR;
    closedir DIR;
        chdir($$pnode) || die "не могу открыть каталог: $!\n";
        $cur_dir = cwd;
        foreach $f_cur (@files) {
        if (-f $f_cur) {
                    $path = $cur_dir."/".$f_cur;
            open IN, "<$f_cur" || warn "не могу открыть файл $f_cur. $!\n", redo;
                        $ch = 0;
                        while ($str = <IN>) {
                    if ($$pcase) {
                            @result = $str =~ m/$$psamp/g;
                            $ch += @result;
                        } else {
                            @result = $str =~ m/$$psamp/gi;
                            $ch += @result;
                        }
                }
                print RESOUT "$path  послед. { $$psamp } = $ch\n";
                close(IN);
            }
            if ((-d $f_cur) && !($f_cur =~ /^\.\.?$/)) {
                search_sampl(\$f_cur, $psamp, $pcase);
                chdir("$cur_dir") || warn "не могу открыть каталог $cur_dir. $!\n", redo;
            }
    }
}
Надыбал эту лабу, где уже не помню. Преподаватель докапался до переменных где происходит поиск с учетом регистра и без: $$psamp. Мол для чего тут два символа доллара? Сам никак не допру, помогите кто разберется пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.10.2011, 20:28
Ответы с готовыми решениями:

FreePascal. Известна стоимость покупки и продажи доллара в банках. Найти банк, где разница между куплей и продажей доллара минимальна
В городе N банков. Известна стоимость покупки и продажи доллара в этих банках. Найти банк, где разница между куплей и продажей доллара...

Строка между двумя одинаковыми символами
Здравствуйте, может кто сталкивался с такой проблемой. Мне нужно регулярными выражениями выбирать подстроку(-ки) между двумя одинаковыми...

Вставка символа между двумя символами в файле
Добрый день. Изучая С дошел до темы файлового ввода-вывода, ни у Дейтелов, ни у Прата не нашел ответ на вопрос, пользовался поиском по...

6
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
21.10.2011, 03:52
Это разименование ссылок переданных в суб
1
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 13
21.10.2011, 20:36  [ТС]
Mutagen можно по подробней что это такое "разименование ссылок переданных в суб". Буду очень признательна за информацию.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
22.10.2011, 13:41
это суб (подпрограмма)
Цитата Сообщение от lolli Посмотреть сообщение
sub search_sampl {...}
это передача в неё переменных по ссылке (\ - операция взятия ссылки)
Цитата Сообщение от lolli Посмотреть сообщение
search_sampl(\$node, \$sampl, \$case);
это забор этих ссылок внутри субки
Цитата Сообщение от lolli Посмотреть сообщение
my($pnode, $psamp, $pcase) = @_;
$$var - $ берёт значение из ссылки $var и возвращает его - это и есть операция разыменования
Цитата Сообщение от lolli Посмотреть сообщение
opendir DIR, $$pnode;
1
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 13
22.10.2011, 20:37  [ТС]
Спасибо большое, кое-что проясняется. Т.е это один из способов передачи переменных в функцию. Еще 1 вопрос: Почему чел который делал эту лабу не воспользовался более традиционным способом, зачем все усложнять-то?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
22.10.2011, 23:51
Думаю что писал программист с, и у него привычка к поинтерам
1
 Аватар для volodin661
6806 / 2305 / 349
Регистрация: 10.12.2013
Сообщений: 7,932
30.07.2018, 18:45
Рубрика "Листая старые страницы"

Замечание:
Передавать явно адрес скаляра большого смысла не имеет,
потому что скаляр и так передаётся по ссылке.

проверка этого утверждения:
Perl
1
2
3
4
5
sub test { $_[0] = 1000000; undef }
 
my $arg = 10;
test($arg);
print($arg);
на выходе будет что? правильно, мильон.



С практической точки зрения студенту для решения надо было воспользоваться удобной утилитой
find2perl, которая генерирует скелетон готового решения поиска файлов по дереву на языке Perl, используя соответствующие опции утилиты find, которые пользователь должен предоставить.

Bash
1
find2perl требуемый_каталог -name '*часть_имени*'
Будет сгенерирован следующий скелет:
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use strict;
use File::Find ();
 
# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.
 
# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;
 
sub wanted;
 
 
 
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, 'требуемый_каталог');
exit;
 
 
sub wanted {
    /^.*часть_имени.*\z/s
    && print("$name\n");
}
Всё, что требуется - это в теле sub wanted разместить нужную функциональность
Миниатюры
Переменные с двумя символами доллара ($$)  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2018, 18:45
Помогаю со студенческими работами здесь

Найти количество групп с двумя и тремя символами
Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами. Найти количество...

Cкопировать инфу между символами табуляции в разные переменные
Снова возникла необходимость в использовании регулярных выражений. Есть таблица с примерно вот таким содержимым: ...

Удалить символы расположенные между двумя заданными символами
Подскажите пожалуйста , какой нужно использовать код , что бы удалить в строке символы после определенного символа, и остановить удаление ,...

Как получить текст между двумя одинаковыми символами
Приветствую форумчане. Ребят, прошу вашей помощи. Доделываю форум и осталось реализовать ответ на сообщения пользователей на котором...

Удаление в текстовом файле символов между двумя известными символами
Добрый день. Не нашёл решение проблемки на форуме, а суть проблемы в следующем: есть текстовичок такого вида &quot;52PO:1БС10:00000&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru