?

Log in

No account? Create an account
программистское, мимоходом - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

программистское, мимоходом [апр. 12, 2005|03:56 pm]
Anatoly Vorobey
Несколько дней назад я провёл три часа в отладчике, ползая по коду отладочной версии перла под Windows XP, и всё из-за того, что под Windows, оказывается, если в cmd.exe написать

set foo="bar"

то значение переменной среды foo будет не bar, а "bar".

Из-за этого одна из стандартных возможностей Перла, опирающаяся на правильное определение переменной среды, у меня не работала. И я думал, что это из-за какого-то бага в Перле под Win32, и ползал по его исходникам с редактором в одной руке и отладчиком в другой.

В последнее время я всё чаще ощущаю солидарность с автором веблога Nick Hates Software.
СсылкаОтветить

Comments:
[User Picture]From: yuridichesky
2005-04-12 01:03 pm
Nick Hates Software?
Больше похоже, что
Software Fucks Nick
:)
(Ответить) (Thread)
[User Picture]From: kapterev
2005-04-12 01:05 pm
Скажите, а сочетание переменной и его значения - это для примера, или вы и правда их в таком виде используете? ;)
(Ответить) (Thread)
[User Picture]From: avva
2005-04-12 01:07 pm
В смысле? Это стандартный пример такой.

У меня там было что-то вроде

set PERL5DB = "c:\some long path\somefile.pl"
(Ответить) (Parent) (Thread)
[User Picture]From: kapterev
2005-04-12 01:10 pm
Простите, я не программист. У меня почему-то возникли аллюзии на аббревиатуру FUBAR.
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2005-04-12 01:13 pm
foo, bar и foobar - стандартные имена переменных, используемых программистами в разного рода примерах, и они действительно (согласно самой вероятной версии) восходят к аббревиатуре FUBAR.
(Ответить) (Parent) (Thread)
[User Picture]From: pargentum
2005-04-12 03:08 pm
Я даже в IBM'овских редбуках такие примеры встречал.
(Ответить) (Parent) (Thread)
[User Picture]From: vitus_wagner
2005-04-12 01:17 pm
Правильные аллюдии. Согласно The Jargon File традиция использовать имена foo и bar в качестве тестовых переменных/строковых значений has generally traced to the WWII-era Army slang acronym FUBAR.

Но привычка использовать эти имена насто-о-олько прилипчива...
(Ответить) (Parent) (Thread)
[User Picture]From: yuridichesky
2005-04-12 01:20 pm
Так часто бывает, что долго ищешь сложную ошибку, а ее нет.
Можно так быстро проверить что чему равно (в виндовом терминале):
Печатаем
set foo="bar"
Потом печатаем
set
и видим, что в результате foo равняется "bar"
(Ответить) (Thread)
[User Picture]From: avva
2005-04-12 01:22 pm
Я много раз делал set и это видел, но мне и в голову не приходило, что эти вставленные "" будут передаваться приложению. Я настолько привык к тому, что "" - quoting characters, что мозг просто их отфильтровывает.
(Ответить) (Parent) (Thread)
[User Picture]From: livsy
2005-04-12 02:11 pm
В Кэмелбуке, если не ошибаюсь в главе про однострочники, есть фраза типа: "Кто-нибудь вообще знает где описаны правила использования кавычек в коммандном процессоре windws?". ;)
(Ответить) (Parent) (Thread)
[User Picture]From: pargentum
2005-04-12 03:29 pm
Ужас в том, что если написать "С:\Program Files\Far\Far" или даже C:\"Program Files"\Far\Far, оно кавычки все-таки откинет.
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2005-04-12 03:32 pm
Ой ли? Сейчас попробовал, не откинуло.
(Ответить) (Parent) (Thread)
[User Picture]From: pargentum
2005-04-12 03:59 pm

Вот сейчас попробовал

CMD.EXE из поставки OS/2 в аналогичной ситуации откидывает. В обоих вариантах.

А в set не откидывает.

В винду перегружаться лень.

Возможно, я не точно описал условия опыта. Если написать указанные строки не в правой части присваивания переменной среды, а в качестве имени команды.

То есть если написать c:>"С:\Program Files\Far\Far", запустится Far

(Ответить) (Parent) (Thread)
[User Picture]From: avva
2005-04-12 04:01 pm
CMD.EXE из поставки OS/2 в аналогичной

А что делает оболочка в CP/M? ;-)

То есть если написать c:>"С:\Program Files\Far\Far", запустится Far

Это да, это может быть.
(Ответить) (Parent) (Thread)
[User Picture]From: pargentum
2005-04-12 04:25 pm
Обижаете.

CMD.EXE в оси и в виндах в точности одинаковый. До мелочей. Кроме того, что виндовый при запуске программ проверяет ассоциации эксплорера и поэтому может запустить .doc или .html как программу, а осевый нет.
(Ответить) (Parent) (Thread)
[User Picture]From: 109
2005-04-12 01:32 pm
а раньше что, не сталкивался нкогда? достаточно ведь один раз столкнуться, чтобы больше такой ошибки не делать.
(Ответить) (Thread)
[User Picture]From: avva
2005-04-12 01:33 pm
Раньше никогда. Да нахрен мне сдались эти переменные среды в Win32.
(Ответить) (Parent) (Thread)
From: screamager
2005-04-12 02:15 pm
В последнее время я всё чаще ощущаю солидарность с автором веблога Nick Hates Software.

Спасибо за линк, очень смешной блог.
(Ответить) (Thread)
[User Picture]From: gaal
2005-04-12 02:33 pm
This is especially sucky because sometimes you *have* to include the double quotes, e.g. when using the DOSish find.
(Ответить) (Thread)
[User Picture]From: avva
2005-04-12 05:07 pm
Gah!
(Ответить) (Parent) (Thread)
[User Picture]From: mopexod
2005-04-12 08:24 pm
Попробуй ещё так:
set a= 7
Или даже так:
set a = 7
(Ответить) (Thread)
[User Picture]From: avva
2005-04-13 08:40 am
Ааааааа!
(Ответить) (Parent) (Thread)