Pergunta

Possível duplicata:
Como encontro o diretório doméstico de um usuário em Perl?

Estou executando o Ubuntu.

Sempre que passo a um script perl um caminho que começa com ~ (por exemplo: ~/Documents/file.txt) Falha em encontrá -lo. Devo passar no caminho canônico (por exemplo /home/dave/Documents/file.txt).

Por que é que?

Posso fazer Perl reconhecer ~ caminhos?

ATUALIZAR

Todas as soluções sugeridas incluem alterar o código nos scripts. Eu gostaria de uma solução que não envolveria nenhuma alteração nos próprios scripts (já que nem todos eles são meus). Talvez algo na maneira como o Bash funciona?

A versão atualizada da pergunta foi postado no super usuário.

Foi útil?

Solução

Para um método confiável (e fácil) de plataforma cruzada, tente Arquivo :: Homedir:

use File::HomeDir;
print File::HomeDir->my_home;

Outras dicas

Você pode passar o caminho para glob Para expandi -lo.

o glob A função entende o Globbing de arquivos Unix padrão.

my $file = glob('~/Documents/file.txt');

Do comentário de Bruno, você pode fazer da seguinte maneira:

$path =~ s/^~(\w*)/ ( getpwnam( $1 || $ENV{USER} ))[7] /e;

o e A bandeira substitui a expressão pelo resultado do executando ou avaliação a expressão de substituição.

Use-citações de ângulo, e não duas ditas:

open(my $fh, "< :crlf :encoding(cp1252)",
              <~/Documents/file.txt>)
    || die "couldn't open Winblose text file ~/Documents/file.txt: $!";

o <xxx> operador de iteração, que as pessoas geralmente consideram açúcar sintático para o readline função, em vez disso, chama o glob função se houver metachars de shell em xxx, e Tilde conta como um desses.

Você pode preferir um modo aberto de <:encoding(Latin1). Depende apenas do arquivo.

Tente substituir ~ com $ENV{HOME}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top