Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мистика! Даже не знаю, как спросить, Win32::GetFullPathName(dirname(...)) 
:(
    Опции темы
Danissimo
Дата 12.9.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Код

use warnings;
use strict;
use File::Basename;

my $dir = dirname($0);
print "dirname    = " . dirname($0) . "\n"
    . "pathname   = " . Win32::GetFullPathName($0) . "\n"
    . "path(\$dir) = " . Win32::GetFullPathName($dir) . "\n"
    . "path(dir)  = " . Win32::GetFullPathName(dirname($0)) . "\n";


Последний вызов возвращает неопределенное значение. Почему?
PM MAIL   Вверх
sharq
Дата 13.9.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Danissimo, мистика и Perl - понятия не совместимы  smile 

ВОт результат работы:
Код

dirname    = .
pathname   = C:\Documents and Settings\sharq\Рабочий стол\2.pl
path($dir) = C:\Documents and Settings\sharq\Рабочий стол
path(dir)  = C:\Documents and Settings\sharq\Рабочий стол


 smile 


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Danissimo
Дата 13.9.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Ну-ну, типа, я не запускал. Сам придумал. Из пальца высосал.

Что там было по поводу "несовместимы"? =))))))))))))))))))))

Добавлено @ 13:34 
Код

[B]Use of uninitialized value in concatenation (.) or string at x.pl line 6.[/B]
dirname    = .
pathname   = C:\prjs\workspace\x.pl
path($dir) = C:\prjs\workspace
path(dir)  =

PM MAIL   Вверх
amg
Дата 13.9.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



У меня та же ошибка, что и у Danissimo. 
Может быть (ни на чем не основанное предположение) в выражении Win32::GetFullPathName(dirname($0)) Win32::GetFullPathName вызывает File::Basename::dirname, последний для своей работы под виндой вызывает Win32 и т.д., замкнутый круг, который не разруливается в некоторых версиях Perl'а ?
PM MAIL   Вверх
sharq
Дата 13.9.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Danissimo, 

Во-первых, функция Win32::GetFullPathName в качестве параметра принимает FILENAME. В зависимости от контекста возращает разное.
Цитата

GetFullPathName combines the FILENAME with the current drive and directory name and returns a fully qualified (aka, absolute) path name. In list context it returns two elements: (PATH, FILE) where PATH is the complete pathname component (including trailing backslash) and FILE is just the filename part. 



amg, 
Цитата(amg @  13.9.2006,  15:36 Найти цитируемый пост)
замкнутый круг, который не разруливается в некоторых версиях Perl'а ? 

неверное предположение.

Во-вторых, "мистики" в Perl не бывает!

В-третьих, вот мой исходник.
Код

#!perl

use strict;
use warnings;

use File::Basename 'dirname';

my $dir = dirname($0);
printf "%15s = %s\n", @$_
    for (
    ['dirname'   , $dir                               ],
        ['dirname1'  , dirname($0)                        ],
        ['pathname'  , join '', Win32::GetFullPathName($0)],
        ['pathname1' , Win32::GetFullPathName($0)         ],
        ['path($dir)', Win32::GetFullPathName($dir)       ],
        ['path(dir)' , Win32::GetFullPathName(dirname($0))],
    );

Сохранен он у меня на рабочем столе. Запускаю его и вот результат.
Код

>perl 2.pl
        dirname = .
       dirname1 = .
       pathname = C:\Documents and Settings\sharq\Рабочий стол\2.pl
       pathname1 = C:\Documents and Settings\sharq\Рабочий стол\
     path($dir) = C:\Documents and Settings\sharq\
      path(dir) = C:\Documents and Settings\sharq\


 smile

Добавлено @ 15:20 
Danissimo, ты лучше скажи, что тебе нужно получить?


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Danissimo
Дата 13.9.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Мне нужно, чтобы Win32::GetFullPathName(dirname($0)) вернул то же самое, что и

my $myDir = dirname($0);
$myDir = Win32::GetFullPathName($myDir);


 ! 
sharq
За неоднократное хамство на форуме - первое предупреждение!


Это сообщение отредактировал(а) sharq - 13.9.2006, 15:39
PM MAIL   Вверх
amg
Дата 13.9.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(sharq @  13.9.2006,  15:17 Найти цитируемый пост)
неверное предположение.
Очень может быть, даже скорее, что неверное, поскольку взято с потолка. Тем не менее работа обсуждаемого кода все же зависит от версии дистрибутива Perl:

ActivePerl 5.8.2 Build 808
Код

c:\tmp>perl 2.pl
        dirname = .
       dirname1 = .
       pathname = c:\tmp\2.pl
      pathname1 = c:\tmp\
     path($dir) = c:\
Use of uninitialized value in printf at 2.pl line 10.
      path(dir) =

ActivePerl 5.8.6 Build 811
Код

c:\tmp>perl 2.pl
        dirname = .
       dirname1 = .
       pathname = c:\tmp\2.pl
      pathname1 = c:\tmp\
     path($dir) = c:\
      path(dir) = c:\


PM MAIL   Вверх
nitr
Дата 13.9.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Цитата(amg @  13.9.2006,  16:16 Найти цитируемый пост)
Тем не менее работа обсуждаемого кода все же зависит от версии дистрибутива Perl

amg, а может модуля? smile


--------------------
PM   Вверх
amg
Дата 13.9.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Почти наверняка именно модуля. Но точный ответ я дать не могу, так как не исследовал этот вопрос, а ставил целиком дистрибутивы от Active State.
PM MAIL   Вверх
nitr
Дата 13.9.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



надо это в FAQ добавить smile 

типа если какие-то проблемы работы скрипта с модулем, то обновить модуль способами перечисленными выше (в FAQ) smile или, если таковой есть, прочесть change.log (history.log, troubleshootings.txt и т.п.) 

не перечислить все smile


--------------------
PM   Вверх
Danissimo
Дата 13.9.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Означает ли это, что мне нужно проапдейтить некий модуль до некой версии? Или чего это означает?
PM MAIL   Вверх
nitr
Дата 13.9.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Danissimo, да попробуй обновить модуль, раз amg нашёл его отличия в версиях перл smile .

Добавлено @ 17:20 
или сам перл smile


--------------------
PM   Вверх
Danissimo
Дата 13.9.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 14.8.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Да, согласен, в идеале так и следовало бы поступить. Но, к сожалению, не в моем случае.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1742 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.