Вы цитируете всю команду, включая аргументы командной строки.Вы должны были поставить свою вторую экранированную цитату после mysql.exe
:
open (IN, "| \"C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe\" -u root -ppwd") or die "$!";
Возможно, вас также заинтересуют операторы qq()
и q()
, которые позволяют использовать разделители, отличные от кавычек.разделять строки.Они очень полезны, когда вы хотите заключить в кавычки строку, содержащую кавычки:
qq[| "C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe" -u root -ppwd]
Кроме того, Perl с радостью обработает правильный разделитель пути для имен команд (но не всегда для аргументов команд, поэтому будьте осторожны):
qq[| "C:/Program Files/MySQL/MySQL Server 5.1/bin/mysql.exe" -u root -ppwd]
(И поскольку этот пример не требует интерполяции, вы могли бы использовать одинарные кавычки или конструкцию q()
:
'| "C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe" -u root -ppwd'
)