En fait, ~
n'est pas spécial dans les chaînes de caractères entre guillemets, comme l'expression de remplacement de la fonction s///
. Quelques autres sont cependant spéciaux. Des quatre personnages que vous avez cités, /
est spécial lorsque /
est utilisé comme délimiteur, comme c'est le cas ici.
N'essayez pas de générer du code Perl à partir du shell ! Utilisez l'une des méthodes suivantes :
export $user_input
perl -i -pe's/__MY_PLACEHOLDER__/$ENV{user_input}/g'
ou
USER_INPUT=$user_input perl -i -pe's/__MY_PLACEHOLDER__/$ENV{USER_INPUT}/g'
ou
perl -i -pe'
BEGIN { $user_input = shift }
s/__MY_PLACEHOLDER__/$user_input/g
' "$user_input"
Au fait, tu n'as vraiment pas compris le point de vue de xargs
!
perl ... `find my_dir -type f -print0 | xargs -0`
n'est pas différent de
perl ... `find my_dir -type f`
Ce que vous vouliez, c'est
find my_dir -type f -print0 | xargs -0 perl ...
Ceci passera les noms de fichiers à perl
démêlés. Il appellera même perl
plus d'une fois avec différents lots d'arguments si nécessaire pour éviter de se heurter aux limites de longueur de la ligne de commande.