powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / ActivePerl неправильно помещает параметры командной строки в @ARGV
12 сообщений из 12, страница 1 из 1
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38306780
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть простой код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#!/usr/bin/perl

use strict;

my $arg1;
my $arg2;

($arg1, $arg2) = @ARGV;

print '$arg1: --|', $arg1, "|--\n";
print '$arg2: --|', $arg2, "|--\n";



Если выполнить этот код в командной строке (Win7) следующим образом:

Код: plaintext
perl tmp.pl "Абвгде" "E:\Абвгде\жзийк лмноп\"

То он выводит следующее

Код: plaintext
1.
2.
$arg1: --|└стуфх|--
$arg2: --|E:\└стуфх\цчшщъ ыьэюя"|--

Проблема в том что во втором аргументе остается кавычка, а в некоторых ситуациях после нее появляется еще и пробел.

От чего может быть такое поведение и куда копать? Спасибо.
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38307148
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginner,

От ActivePerl'а. Переходите на нормальные ОС.
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38307779
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginnerПроблема в том что во втором аргументе остается кавычка, а в некоторых ситуациях после нее появляется еще и пробел.

От чего может быть такое поведение и куда копать? Спасибо.
Во втором случае у вас перед кавычкой стоит знак \, который экранирует эту кавычку. В windows для разделения каталогов используйте \\ или /
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38308281
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gijad,

Баа, точно. Вот на си я обнаружил тоже такое же поведение. Только так и не понятно, на какой стороне происходит экранирование, в оболочке, в системе или уже в приложении. И вообще почему.
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38308359
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginner,
Это и perl и оболочка делают, так их научили разработчики. У вас если бы не было кавычек, то получилось бы 3 параметра, т.к. пробел это разделитель для них.
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38309742
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gijad,

Вообще то речь шла об экранировании символов, а не о объединении слов в строку. Загвоздка в том что в cmd.exe символы экранирования это ^ и %, а не \.
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38310257
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginnerЗагвоздка в том что в cmd.exe символы экранирования это ^ и %, а не \.
в cmd "" позволяют передать параметр с пробелом как один. perl же разглядел первую кавычку, но не увидел вторую из-за экрана.
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38310388
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gijad,

Не понимаю причем здесь пробелы с их кавычками, чего вы тычете ими в каждом посте, как они к вопросу относятся?
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38310438
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginner,

Гм...
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[root@warstone ~]# perl test.pl  " " "  \"" ' '
Param: ' '
Param: '  "'
Param: ' '
[root@warstone ~]# cat test.pl
#!/usr/bin/perl

foreach(@ARGV){
    print "Param: '$_'\n";
}

Еще вопросы есть?
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38313232
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Warstone
Код: php
1.
[root@warstone ~]# Лолшто???


Порадовать публику можно было и по смешнее, ибо UNIX Bash != Windows cmd.exe
Вы не по адресу, или учите разницу между осями, дверь вон там.
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38313536
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginnerПорадовать публику можно было и по смешнее, ибо UNIX Bash != Windows cmd.exe
Вы не по адресу, или учите разницу между осями, дверь вон там.
толсто
...
Рейтинг: 0 / 0
ActivePerl неправильно помещает параметры командной строки в @ARGV
    #38475765
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginnerЕсть простой код:

Проблема в том что во втором аргументе остается кавычка, а в некоторых ситуациях после нее появляется еще и пробел.

От чего может быть такое поведение и куда копать? Спасибо.

куда копать? --> 1) А в StrawberryPerl что получается? 2) а в ActivePython? 3) а если не из под cmd.exe, а из под powershell?

с позиции здравого смысла двойными кавычками должен заведовать cmd.exe и передавать в данном случае в приложение два параметра уже без кавычек. говорить про экранирование бэкслэшем в виндусе(msdos), где бэкслэш служит разделителем частей спецификации имени файла - ерунда.
( вот спрашивается, о чём думали разработчики, когда вводили бэкслэш вместо прямого слэша в спецификацию, учитывая, что разработка велась на языке С ? И о чём думали они же, когда придумывали в Виндус разные 1-байтные кодировки в окошках, имея уже реализованный Юникод под капотом ? ). (( и вот теперь, в 21 веке, волоча эту гнусную ношу, они вводят бэктик (`) в качестве экранирующего символа в powershell ! ))
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / ActivePerl неправильно помещает параметры командной строки в @ARGV
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]