Страница 1 из 1
В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-16 13:24:52
Rita
Здравствуйте, не могу понять объясните пожалуйста.
Дело в том что для переменной $1 присваевается значение 12301212-pptp0, я перлом вырезаю кусок значения и отдаю оставшееся для скормления в консоль mpd, но почему следующий код работает:
Код: Выделить всё
#!/usr/bin/perl
$t="12301212-pptp0";
$t=~ s/\d+[-]//;
print $t;
exit;
а вот такой нет:
Код: Выделить всё
#!/usr/bin/perl
$1="12301212-pptp0";
$е=$1
$1=~ s/\d+[-]//;
print $1;
exit;
Мне нужно чтобы срабатывл второй кусок кода.
Литературу читала, но так и не поняла различий

Re: В чем разница между t$ и 1$, не работает скрипт
Добавлено: 2008-05-16 13:35:33
zg
имена пользовательских переменных не могут начинаться с цифр, это правило для всех. Цифровые переменные обычно используются только в специальных случаях.
Re: В чем разница между t$ и 1$, не работает скрипт
Добавлено: 2008-05-16 13:38:09
zg
zg# man perlva писал(а): $<digits>
Contains the subpattern from the corresponding set of capturing
parentheses from the last pattern match, not counting patterns
matched in nested blocks that have been exited already.
(Mnemonic: like \digits.) These variables are all read-only
and dynamically scoped to the current BLOCK.
Re: В чем разница между t$ и 1$, не работает скрипт
Добавлено: 2008-05-16 14:06:58
Rita
zg писал(а):Цифровые переменные обычно используются только в специальных случаях.
А можно пример случая? Как тогда мне быть?
Re: В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-16 14:28:42
ProFTP
это зарезервированно..
используйте другие символы, напрмиер
Re: В чем разница между t$ и 1$, не работает скрипт
Добавлено: 2008-05-16 14:31:14
zg
Rita писал(а):А можно пример случая? Как тогда мне быть?
в перле такие переменные обозначают номер шаблона, который был найден в последнем использовании регулярного выражения
Код: Выделить всё
zg# cat 1.sh
#!/usr/bin/perl
$_ = "12301212-pptp0";
print "Match $1\n" if /(\d+)/;
exit;
zg# ./1.sh
Match 12301212
zg#
Re: В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-16 18:54:28
Rita
Но дело в том что биллинг передает в переменной $1 данные типа IP соединения или маску, в зависимости от ситуации.И вот эти переменные потом и исполняются в соответствующем скрипте по событию, т.е. если скрипт писать не шелле то все нормально будет а вот для перла нет.

Re: В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-16 19:10:08
ProFTP
Re: В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-16 19:20:10
zg
Rita писал(а):Но дело в том что биллинг передает в переменной $1
шелл использует переменные $N как массив параметров для скрипта, поэтому во избежание путаницы - что конкретно нужно сделать и на каком языке программирования?
Re: В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-17 13:11:14
Rita
ProFTP писал(а):
это зарезервированно..
используйте другие символы, напрмиер
В том то и вся проблема что в перле зарезервировано.
Использовать другие не смогу потому как я же объясняла что это заложено в биллинге.
На перле все нужно делать.
Например, биллинг передает в переменной $1 данные типа IP(вообще биллинг передает 4 переменных $1 $2 $3 $4). И вот эти переменные потом и исполняются в соответствующем скрипте по событию создания учетной записи, например вот такой скрпит:
Код: Выделить всё
#!/usr/bin/perl
$i1=$1;
open (LOGF, ">>new") || die "$!";
print LOGF "Создана учетка с IP $i1 ", scalar(localtime), "\n";
close(LOGF);
В итоге в файле new запись:
Создана учетка с IP Sat May 17 14:09:02 2008
а должно быть:
Создана учетка с IP 192.168.1.1 Sat May 17 14:09:02 2008
п.с.
Когда подобное делаю на шелле:
Код: Выделить всё
#!/bin/sh
echo "`date`
Создана учетка с IP $1
-----------------------------------------------------------------------" >> new.rules
exit 0
То в файле news.rules отображается:
Создана учетка с IP 192.168.1.1
Re: В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-17 16:44:23
hizel
каким образом эти данные передаются?
в коммандной строке?
если да попробуйте вместо $1 $ARGV[1]
Re: В чем разница между $t и $1, не работает скрипт
Добавлено: 2008-05-17 17:10:10
Rita
hizel писал(а):если да попробуйте вместо $1 $ARGV[1]
ААА ура! Заработало!!! Я счастлива
