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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить имя/путь скрипта в самом себе 
:(
    Опции темы
_hunter
  Дата 9.1.2008, 20:16 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Добрый день...

Можно ли как-то в скрипте узнать путь к себе? Т.е. нужно что-то типа сишного argv[0] (как я понимаю перловский @ARGV содержит именно параметры командной строки).

С уважением...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
KSURi
Дата 9.1.2008, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$0


Добавлено @ 20:47
Или для точности 
Код

use Cwd qw(abs_path);
print abs_path($0);


Это сообщение отредактировал(а) KSURi - 9.1.2008, 20:48


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
nitr
Дата 10.1.2008, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это уже обсуждалось на форуме, к сожалению $0 не всегда даёт ожидаемый результат. Так что, KSURi, правильно поправился

Вот почему:
1.pl
Код
#!perl
print $0

Цитата
c:\>1.pl
c:\1.pl
c:\>perl 1.pl
1.pl
c:\>



Чтобы было верно smile
1.pl
Код
#!perl
use Cwd 'abs_path';
print abs_path($0)

Цитата
c:\>1.pl
c:\1.pl
c:\>perl 1.pl
C:\1.pl
c:\>


В переменной $0 содержится имя скрипта и путь его вызова. Чтобы получить потом только путь, то надо обработать переменную.
К примеру, создать регесп, но зачем мучится.
В базовом модуле Cwd , есть функция cwd, это можно сказать юниксовая pwd, но для получения "валидного" пути в Windows, надо использовать
Код
#!perl
use Cwd 'getdcwd';

print getdcwd

Даже abs_path выводит "невалидный" для Windows путь.
Цитата
c:\a\b\c>1.pl
c:/a/b/c/1.pl

c:\a\b\c>


Имхо, надо примерно так, возможно есть иное решение ;)
Код
#!perl
use Cwd;

my $dir = ($^O =~ /win/i) ? getdcwd : getcwd;
print $dir;






--------------------
PM   Вверх
AlexPet
Дата 10.1.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я всегда использовал для получения пути модуль FindBin:
Код

use FindBin qw($Bin);
print "$Bin\n";

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


Эксперт
****


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

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



AlexPet, если глянуть на исходник этого модуля, то вот что можно увидеть:
Код
     # Get absolute paths to directories
     if ($Bin) {
      my $BinOld = $Bin;
      $Bin = abs_path($Bin);


так что... ;)

Да и у вас тоже надо регеспом "модифицировать" эту переменную:
Цитата
c:\a\b\c>1.pl
c:/a/b/c
c:\a\b\c>



--------------------
PM   Вверх
AlexPet
Дата 10.1.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



nitr, да, точно.
Никогда не обращал внимание на косые черты в win32 
PM MAIL ICQ Jabber   Вверх
KSURi
Дата 10.1.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В принципе nitr прав, но фатального ничего не случится, если вы не исправите слэши, т.к. Windows воспринимает оба варианта:
Код

C:\>cd /Users

C:\Users>cd .\KSURi

C:\Users\KSURi>



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
nitr
Дата 10.1.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(KSURi @  10.1.2008,  16:22 Найти цитируемый пост)
 т.к. Windows воспринимает оба варианта:

Она понимает как-то "кривовато" ;)
Цитата
c:\a\b\c>d:

D:\>cd c:/a/b/c
Системе не удается найти указанный путь.

D:\>


она иначе воспринимает, можно найти конечно документацию, но стоит ли?
Цитата
C:\a\b\c>
C:\a\b\c>cd c:/

C:\a\b\c>cd c:\

C:\>cd /a/b/c

C:\a\b\c>

Цитата
C:\a\b\c>cd c:\

C:\>cd c:\a\b\c

C:\a\b\c>cd c:\

C:\>cd c:/a/b/c

C:\a\b\c>

отличия при работе с разными дисками smile


--------------------
PM   Вверх
KSURi
Дата 11.1.2008, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я совсем забыл, что у меня Vista)

Цитата(nitr @  10.1.2008,  20:12 Найти цитируемый пост)
C:\a\b\c>
C:\a\b\c>cd c:/ # остались на месте

C:\a\b\c>cd c:\

C:\>cd /a/b/c

C:\a\b\c>


а у меня:
Код

D:\a\b\c>cd D:/ # переместились в корень

D:\>cd a/b/c

D:\a\b\c>cd D:\

D:\>cd a\b\c

D:\a\b\c>


Оказывается в Vista немного не так, как в XP. Раньше не замечал


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


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

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


 




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


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

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