Мульти-аргумент из system()
лучше в этом случае:
system('perl', 'x.pl', $url);
Когда вы передаете system()
единственную строку, содержащую метасимволы оболочки (включая пробелы), она вызывает ее через /bin/sh
(по крайней мере, в Unix-подобных системах) - это означает, что такие вещи, как символ &
будут интерпретироваться оболочкой, если (как подсказывает @MikePlayle) вы не цитируете ее.
Но когда вы даете system()
несколько аргументов, он обходит оболочку и выполняет команду, указанную в первом аргументе, напрямую, передавая ей другие аргументы.
Форма с одним аргументом полезна, когда вы хотите, чтобы оболочка обрабатывала метасимволы - например, если вы хотите сделать перенаправление ввода-вывода (включая каналы) и / или подстановочные знаки, то, что может сделано в Perl, но с чуть большим усилием.
perldoc perlfunc
и найдите «system» для получения дополнительной информации, или см. Здесь .