powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / perl: как загнать в строковую переменную фигурные скобки?
10 сообщений из 10, страница 1 из 1
perl: как загнать в строковую переменную фигурные скобки?
    #39119522
Barsik72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, весь мозг изломал, подскажите пожалуйста!

Есть файл с масками для регулярных выражений. Я его читаю, и потом в соответствии с масками считаю сколько у меня файлов каждого вида, подсовывая маску в ls - grep.

Все было хорошо, пока не принесли маску с кучей вот таких скобок: {}

Перл эту маску воспринимает как массив! Если сказать printf("%s", $mask), то он напечатает вот такую пургу: ARRAY(0x6b0a2d0)

И в grep такая-же пурга улетает.

Подскажите, как заставить его не интерпретировать, а воспринимать её просто как строку?


От гугля меня уже на клаву рвёт...
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39119618
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barsik72,
что я делаю не так?

Код: perl
1.
2.
3.
4.
5.
!/bin/perl

my $ss='test 1 {123} 2';

printf("%s", $ss);


результат:
test 1 {123} 2
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39119768
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Q.Tarantino,
не экранировать ли скобку то надо.
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39119798
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergey,
В одинарных то кавычках зачем?
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39119981
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklekunaksergey,
В одинарных то кавычках зачем?
а это тут причем?
я так понял что проблема с выводом. ТС условие задачи описал очень туманно.
Для полного понимания пусть хоть кусок кода приведет.
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39119982
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergeyQ.Tarantino,
не экранировать ли скобку то надо.
а надо?

p.s. каков вопрос - таков ответ.
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39120080
Barsik72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Q.Tarantino,

Код такой:

1. Засосал конфиг из файла.

my $cfg = new Config::Simple($cfg_file) || die $!;.
my %config = $cfg->vars();.

Файл а-ля реестр виндовз. Нахожу нужную ветку, содержимое читаю в переменную:

my $patt = $config{$1.'/FileRollPolicy.FilePattern'} || '*'

Ну т.е. если есть регулярка на имена файлов, буду применять ее, нет - все файлы считать буду

Далее вывожу это на экран (для проверки) и передаю в функцию

list_ftp($host, $port, $user, $pass, $dir, $patt);

функция открывает соединение и считает количество файлов по маске в каталоге (кусок ее кода):

my $ftp = Net::FTP->new(Host=>$_[0], Port=>21, Debug=>0, Passive=>0, Timeout=>10);
if(!defined($ftp)){
my $ftp = Net::FTP->new(Host=>$_[0], Port=>21, Debug=>0, Passive=>1, Timeout=>10) || return 0;
}
$ftp->login($_[2], $_[3]);
my @files = grep {/$_[5]/} $ftp->ls($_[4]);
$count = scalar(@files);
$ftp->quit();

5-й аргумент и есть маска, т.е. регулярное выражение. Работает со всеми выражениями, кроме тех, где есть {}, к примеру,

s/^(.{5,})_(.{5,})_(.{3})_(\d{14})\.(\d{1,})\.(\d{4})/$5/

при печати printf(%s,$patt) говорит что это массив: ARRAY(0x6f95808)


ЧО делать? В файле экранировать скобки не могу - это конфиг чужой работающей программы, причем он достаточно часто меняется.
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39120819
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barsik72ЧО делать?


во-первых, вот что:

Код: 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.
my $ftp = Net::FTP->new( Host    => $_[0],
                         Port    => 21,
                         Debug   => 0,
                         Passive => 0,
                         Timeout => 10
                       );
$ftp //=  Net::FTP->new( Host    => $_[0],
                         Port    => 21,
                         Debug   => 0,
                         Passive => 1,
                         Timeout => 10
                       );

return 0 if not defined $ftp;

$ftp->login($_[2], $_[3]);

my @files = grep /$_[5]/, $ftp->ls($_[4]);

$count = @files;

$ftp->quit();

s/^ (.{5,})_(.{5,})_(.{3})_(\d{14}) \. (\d{1,}) \. (\d{4}) /$5/x;



во-вторых, фигурные скобки в регулярном выражении
не имеют прямого отношения к возвращению переменной типа анономный массив.

в-третьих, приведи живые данные, а именно, массив, который возвращает $ftp->ls
и регулярные выражения, с которыми сравниваются члены массива

в-четвёртых, покажи строку, где присваивается значение переменной $patt
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39120826
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пункт в-четвёртых снимается,
я не увидел сразу my $patt = $config{$1.'/FileRollPolicy.FilePattern'} || '*';
...
Рейтинг: 0 / 0
perl: как загнать в строковую переменную фигурные скобки?
    #39124823
Barsik72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot volodin661]Barsik72ЧО делать?


во-первых, вот что:

Код: 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.
my $ftp = Net::FTP->new( Host    => $_[0],
                         Port    => 21,
                         Debug   => 0,
                         Passive => 0,
                         Timeout => 10
                       );
$ftp //=  Net::FTP->new( Host    => $_[0],
                         Port    => 21,
                         Debug   => 0,
                         Passive => 1,
                         Timeout => 10
                       );

return 0 if not defined $ftp;

$ftp->login($_[2], $_[3]);

my @files = grep /$_[5]/, $ftp->ls($_[4]);

$count = @files;

$ftp->quit();

s/^ (.{5,})_(.{5,})_(.{3})_(\d{14}) \. (\d{1,}) \. (\d{4}) /$5/x;



во-вторых, фигурные скобки в регулярном выражении
не имеют прямого отношения к возвращению переменной типа анономный массив.

ясно

в-третьих, приведи живые данные, а именно, массив, который возвращает $ftp->ls

а как это сделать? Я perl только начал изучать

и регулярные выражения, с которыми сравниваются члены массива

реальное выражение вот: s/^(.{5,})_(.{5,})_(.{3})_(\d{14})\.(\d{1,})\.(\d{4})/$5/
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / perl: как загнать в строковую переменную фигурные скобки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]