Как я нахожу корневой каталог пользователя в Perl?

Это не вообще возможно, afaik, Mozilla имеет щелчок () метод, но для входных элементов только, не ссылок.

, Почему Вы только не создаете функцию, что кнопка обратится к onClick обработчику и, каждый раз, когда Вы хотите 'нажать' кнопку, вызывают функцию вместо этого?

50
задан hippietrail 26 April 2011 в 16:24
поделиться

5 ответов

~ - это bash -изм, а не perl -изм, поэтому он не работает. Учитывая, что вы, похоже, работаете в системе типа UNIX, вероятно, простейшим решением является использование переменной среды $ HOME , например:

if ( -e $ENV{"HOME"} . "/foo.txt" ) {
    print "yes ,it exists!" ;
}

И да, я знаю пользователь может изменить свою переменную среды $ HOME , но тогда я предполагаю, что они знают, что делают. Если нет, они заслуживают всего, что получают: -)

Если вы хотите сделать это правильным способом, вы можете заглянуть в File :: HomeDir , что намного больше платформенная смекалка. Вы можете увидеть это в действии в следующем скрипте chkfile.pl :

use File::HomeDir;
$fileSpec = File::HomeDir->my_home . "/foo.txt";
if ( -e $fileSpec ) {
    print "Yes, it exists!\n";
} else {
    print "No, it doesn't!\n";
}

и расшифровке:

pax$ touch ~/foo.txt ; perl chkfile.pl
Yes, it exists!

pax$ rm -rf ~/foo.txt ; perl chkfile.pl
No, it doesn't!
69
ответ дан 7 November 2019 в 10:31
поделиться

Вы можете glob тильду, glob ('~ / foo.txt') должен работать. Или вы можете использовать модуль File :: Save :: Home , который также должен заботиться о других системах.

15
ответ дан 7 November 2019 в 10:31
поделиться

Домашний каталог пользователя хранится в / etc / passwd . Лучший способ получить информацию - это функции getpw * :

#!/usr/bin/perl 

use strict;
use warnings;

print "uid:", (getpwuid 501)[7], "\n",
    "name:", (getpwnam "cowens")[7], "\n";

Чтобы решить вашу конкретную проблему, попробуйте следующий код:

if ( -e (getpwuid $>)[7] . "/foo.txt" ) {
   print "yes ,it exists!";
}
11
ответ дан 7 November 2019 в 10:31
поделиться

Попробуйте File :: Path :: Expand .

7
ответ дан 7 November 2019 в 10:31
поделиться

Я не уверен, как все пропустили File :: HomeDir . Это одна из тех сложных задач, которые кажутся простыми, потому что никто не знает обо всех глупых исключениях, о которых вам нужно думать. Он не поставляется с Perl, поэтому вам нужно установить его самостоятельно.

Как только вы узнаете домашний каталог, создайте нужный путь с помощью File :: Spec :

 use File::HomeDir qw(home);
 use File::Spec::Functions qw(catfile);

 print "The path is ", catfile( home(), 'foo.txt' ), "\n";
58
ответ дан 7 November 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: