В чем разница между $t и $1, не работает скрипт

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Rita
сержант
Сообщения: 157
Зарегистрирован: 2007-12-01 23:41:45

В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение Rita » 2008-05-16 13:24:52

Здравствуйте, не могу понять объясните пожалуйста.
Дело в том что для переменной $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;
Мне нужно чтобы срабатывл второй кусок кода.
Литературу читала, но так и не поняла различий :oops:
Последний раз редактировалось Rita 2008-05-16 14:03:40, всего редактировалось 1 раз.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: В чем разница между t$ и 1$, не работает скрипт

Непрочитанное сообщение zg » 2008-05-16 13:35:33

имена пользовательских переменных не могут начинаться с цифр, это правило для всех. Цифровые переменные обычно используются только в специальных случаях.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: В чем разница между t$ и 1$, не работает скрипт

Непрочитанное сообщение zg » 2008-05-16 13:38:09

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.

Rita
сержант
Сообщения: 157
Зарегистрирован: 2007-12-01 23:41:45

Re: В чем разница между t$ и 1$, не работает скрипт

Непрочитанное сообщение Rita » 2008-05-16 14:06:58

zg писал(а):Цифровые переменные обычно используются только в специальных случаях.
А можно пример случая? Как тогда мне быть?

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение ProFTP » 2008-05-16 14:28:42

это зарезервированно..

используйте другие символы, напрмиер
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: В чем разница между t$ и 1$, не работает скрипт

Непрочитанное сообщение zg » 2008-05-16 14:31:14

Rita писал(а):А можно пример случая? Как тогда мне быть?
в перле такие переменные обозначают номер шаблона, который был найден в последнем использовании регулярного выражения

Код: Выделить всё

zg# cat 1.sh 
#!/usr/bin/perl
$_ = "12301212-pptp0";
print "Match $1\n" if /(\d+)/;
exit;

zg# ./1.sh 
Match 12301212
zg# 

Rita
сержант
Сообщения: 157
Зарегистрирован: 2007-12-01 23:41:45

Re: В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение Rita » 2008-05-16 18:54:28

Но дело в том что биллинг передает в переменной $1 данные типа IP соединения или маску, в зависимости от ситуации.И вот эти переменные потом и исполняются в соответствующем скрипте по событию, т.е. если скрипт писать не шелле то все нормально будет а вот для перла нет. :cry:

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение ProFTP » 2008-05-16 19:10:08

Код: Выделить всё

my $i1=$1;
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение zg » 2008-05-16 19:20:10

Rita писал(а):Но дело в том что биллинг передает в переменной $1
шелл использует переменные $N как массив параметров для скрипта, поэтому во избежание путаницы - что конкретно нужно сделать и на каком языке программирования?

Rita
сержант
Сообщения: 157
Зарегистрирован: 2007-12-01 23:41:45

Re: В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение Rita » 2008-05-17 13:11:14

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

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение hizel » 2008-05-17 16:44:23

каким образом эти данные передаются?
в коммандной строке?
если да попробуйте вместо $1 $ARGV[1]
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Rita
сержант
Сообщения: 157
Зарегистрирован: 2007-12-01 23:41:45

Re: В чем разница между $t и $1, не работает скрипт

Непрочитанное сообщение Rita » 2008-05-17 17:10:10

hizel писал(а):если да попробуйте вместо $1 $ARGV[1]
ААА ура! Заработало!!! Я счастлива :D