perl symlink no arquivo gz

1

Eu tenho um arquivo file1.txt.gz e estou tentando criar um symlink para um arquivo regular como abaixo usando perl

symlink ("file1.txt.gz", orig_file1);

Mas isso não parece funcionar a menos que eu adicione o sufixo .gz ao novo nome do arquivo, por exemplo, orig_file1.gz, o que eu não quero.

    
por user307181 24.08.2018 / 06:10

1 resposta

2

TL; DR - sempre cite as coisas.

Sempre use use strict no código Perl, o que causará uma falha na barra de papel orig_file1 (ou barwords orig_file1 e gz , que são duas sub-rotinas em potencial cuja saída deve ser associada à . catenation operador).

% perl -Mstrict -e 'symlink "x", asdf'
Bareword "asdf" not allowed while "strict subs" in use at -e line 1.
Execution of -e aborted due to compilation errors.
% perl -Mstrict -e 'symlink "x", asdf.gz'
Bareword "asdf" not allowed while "strict subs" in use at -e line 1.
Bareword "gz" not allowed while "strict subs" in use at -e line 1.
Execution of -e aborted due to compilation errors.
% 

A correção é citar corretamente todos os termos, não apenas o primeiro:

#!/usr/bin/env perl
use strict;
use warnings;
symlink "file1.txt.gz", "orig_file1";

Esse comportamento pode ser contrastado com o shell (ao qual o Perl está um pouco relacionado), o que permite que você (algumas vezes) não cite as coisas:

#!/bin/sh
ln -s -- file1.txt.gz orig_file1

embora essas especialmente se elas são variáveis devem ser citadas no shell (isso é uma sugestão de uso, não um requisito difícil), pois o shell pode fazer coisas inesperadas com vários caracteres especiais que variam de shell para shell.

A linguagem um pouco relacionada TCL permite que você se esqueça de não citar as coisas, pois tem uma sintaxe muito simples:

file link orig_file1 file1.txt.gz

no entanto, é provável que alguém cite coisas, especialmente se pessoas não familiarizadas com o TCL estiverem revisando o código:

file link "orig_file1" "file1.txt.gz"
    
por 24.08.2018 / 06:34