![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Почему-то функция glob выводит путь только до первого пробела, а если указывать в шаблоне виндовые \, то их тоже не выводит. Поместить шаблон в <> тоже не спасает. Что делать?
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -le 'print glob ("*"); print glob ("aa\\ bb/*"); print glob ("aa\\ bb/cc\\ dd/*")'
aa bb aa bb/cc dd aa bb/cc dd/ee ff # |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Выводит: D:./Папка D:/Папка |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
windows у меня нет.
вы заметили отличие моего примера от своего? |
|||
|
||||
| DaemonSuw |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 11.3.2008 Репутация: 3 Всего: 3 |
Logo, да у меня тоже самое(((
юзайте File::Glob::glob
Это сообщение отредактировал(а) DaemonSuw - 12.7.2009, 22:18 |
||||
|
|||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
А эта почему-то с while не работает... странные глюки однако.
|
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
А почему оно должно работать с while?
-------------------- Died at Life.pl line 21 |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
KSURi потому что в принципе функция glob должна работать с while. Стандартная работает, а эта нет, у стандартной другой глюк однако, см выше.
|
|||
|
||||
| DaemonSuw |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 11.3.2008 Репутация: 3 Всего: 3 |
Logo, а так?
glob - возвращает массив строк, а как их обрабатывать это уже не принципиально: for, while, foreach Это сообщение отредактировал(а) DaemonSuw - 16.7.2009, 19:21 |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
DaemonSuw
glob (встроенная) возвращает массив в списковом контексте, а в скалярном она при следующем вызове возвращает следующий файл. Если файлов много, то считывать все сразу в массив будет не эффективно. |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Еще одна похожая проблема(( $image->Read из Image::Magick не работает, если в пути есть русские буквы и с пробелы. Perl вобще способен работать на чем нибудь, кроме *nix(((((
|
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Возможно кому-то понадобится, проблема с glob решается взятием пути в кавычки ", или расстановкой экранирующего слеша перед пробелами. Эта функция ведет себя, так как будто использует системный вызов, хотя вроде кемелбуке про перл 5.6 говорится, что от этого отказались давно.
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Это не глюки, а фичи, поскольку о них написано в документации. Например: "CORE::glob() only accepts a single argument. Due to historical reasons, CORE::glob() will also split its argument on whitespace, treating it as multiple patterns". Так что Вы совершенно правы, проблема с glob решается взятием аргумента в дополнительные кавычки " или расстановкой экранирующего слеша перед пробелами.
Какой там системный вызов! Стандартный шелл винды (cmd) масок в принципе не понимает. |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Понятно, пробел используется чтобы задать несколько масок, оставили это для совместимости.
Понимает, и * и ?, и пробелы также надо в кавычки брать. |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
||||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |