Почему моя острота Perl не работает над Windows?

Вы можете использовать остальные параметры . Синтаксис:

 const hello = (...args) => {
     // args is now an array
     console.log(args)
 }

Затем вы можете использовать его следующим образом:

hello('This ', 'is ', 'an ', 'example') // outputs ['This ', 'is ', 'an ', 'example']

Вы можете передать в него любое количество аргументов.

Итак, вернемся к вашему примеру, у вас может быть что-то вроде

const example = (...targets) => {
  return {
    target: targets,
    endpoint: null,
    tick: 500,
    verbose: true,
    once: false,
  }
}

module.exports = example

И вы можете использовать его примерно так

const example = require('./example')

let val = example('google', 'twitter', 'yahoo')
console.log(val)

Параметр rest должен быть последним твоя функция. Поэтому, если вы хотите передать некоторые другие параметры, синтаксис будет

function hello(param, ...rest) {
    // rest is an array
    ...
}

Вы также можете напрямую передать массив или переменную, ссылающуюся на массив:

function hello(param) {
    ...
    console.log(param)
}

hello(["hello", "world"]) // outputs ["hello", "world"]
or
var arr = ["hello", "world"]
hello(arr)

Вы также можете прочитать больше о Array-подобных объектных аргументах здесь

12
задан Peter Mortensen 11 October 2014 в 07:39
поделиться

2 ответа

Windows cmd.exe не использует ' как представляют разделители в виде строки, только ". То, что Вы делаете, эквивалентно:

perl -p -i.bak -e "'s/log/log,XYZ/g'" config.txt

так -w жалуется, что "Вы дали мне строку, но она ничего не делает".

Решение состоит в том, чтобы использовать двойные кавычки вместо этого:

perl -p -i.bak -e "s/log/log,XYZ/g" config.txt

или просто оставлять их, с тех пор нет никаких метасимволов в этой команде, которая была бы интерпретирована cmd.exe.

Приложение

cmd.exe просто действительно неприятный зверь, для кого-либо приученного к sh- как оболочки. Вот несколько других общих отказов и обходных решений относительно perl вызов.

@REM doesn't work:
perl -e"print"
@REM works:
perl -e "print"
@REM doesn't work:
perl -e "print \"Hello, world!\n\""
@REM works:
perl -e "print qq(Hello, world!\n)"
33
ответ дан 2 December 2019 в 03:54
поделиться

ответ ephemient суммирует проблему хорошо, но у Вас действительно есть другая опция: измените свою оболочку от cmd.exe к лучшей оболочке. Если бы Вы - человек типа Unix затем, я предложил бы изучить Cygwin, который обеспечивает вид среды, Вы привыкли к (например, утилиты Bash и GNU).

Если бы Вы - человек типа Windows, я предложил бы смотреть на PowerShell (урожденный MSH урожденная Монада). На самом деле я предложил бы изучить PowerShell, даже если Вы - человек типа Unix. Это интегрируется с.NET и имеет много аккуратных функций (как объекты, передаваемые через каналы, а не простые строки текста). Если бы я застрял на Microsoft OS, это - оболочка, которую я использовал бы.

Другие оболочки для Windows, который люди, кажется, любят:

5
ответ дан 2 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: