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

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

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

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

Код:

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
6375 / 2200 / 342
Регистрация: 10.12.2013
Сообщений: 7,564
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
AI_Generated 15.05.2025
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса. . .
Сериализация и десериализация данных на Python
py-thonny 15.05.2025
Сериализация — это своего рода "замораживание" объектов. Вы берёте живой, динамический объект из памяти и превращаете его в статичную строку или поток байтов. А десериализация выполняет обратный. . .
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru