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"