2010-10-20 2 views
0

У меня эти три строки в bash, которые работают действительно красиво. Я хочу добавить их в какой-то существующий скрипт perl, но я никогда не использовал perl раньше ....(3 строки) от bash до perl?

может кто-нибудь переписать их для меня? Я пытался использовать их как они есть, и это не сработало

$SSH_CLIENT отмечают, что является параметром времени выполнения вы получите, если вы вводите набор в Баш (Linux)

users[210]=radek  #where 210 is tha last octet from my mac's IP 
octet=($SSH_CLIENT) # split the value on spaces 
somevariable=$users[${octet[0]##*.}]  # extract the last octet from the ip address 

ответ

4

Они могут работать для вас. Я отметил свои предположения с каждой строкой.

my %users = (210 => 'radek'); 

Я предполагаю, что вам нужен разреженный массив. Хеши - стандартная реализация разреженных массивов в Perl.

my @octet = split ' ', $ENV{SSH_CLIENT}; # split the value on spaces 

Я предполагаю, что вы все еще хотел использовать среду переменной SSH_CLIENT

my ($some_var) = $octet[0] =~ /\.(\d+)$/; 

Вы хотите последний набор цифр от '.' до конца.

  • Параны вокруг переменной помещают присвоение в контекст списка.
  • В контексте списка совпадение создает список всех «захваченных» последовательностей.
  • Назначение скаляру в контексте списка означает, что из списка назначается только число скаляров в выражении.

Что касается вашего вопроса в комментариях, вы можете получить переменную из хэша, путем:

$db = $users{ $some_var }; 

# OR--this one's kind of clunky... 

$db = $users{ [ $octet[0] =~ /\.(\d+)$/ ]->[0] }; 
+0

спасибо, вы предположения 1001% правильно :-) – Radek

+0

Как я могу присвоить свое имя от '% users' на основе последнего октета от SSH_CLIENT до переменной $ db? что-то вроде '$ db = $ users [$ {octet [0] ## *.}]' – Radek

+0

это дает мне это 'Использование неявного split to @_ устарело на ./restoreSQLDb строке 177. Глобальный символ" @octet «требуется явное имя пакета в строке ./restoreSQLDb 178.», где строки из кода «my $ octet = split», $ ENV {SSH_CLIENT}; my $ ddb = $ users {[$ octet [0] = ~ /\.(\d+)$/] -> [0]}; ' – Radek

3

Допустим, вы уже получили ваш IP в строке,

$macip = "10.10.10.123"; 
@s = split /\./ , $macip; 
print $s[-1]; #get last octet 

Если вы не знаете, Perl, и вы должны использовать его для работы, вам придется научиться. Неужели вы не собираетесь прийти к SO и спросить каждый раз, когда вам это нужно в Perl?

+0

Я обещаю, что не буду :-) Я хочу, чтобы обновить существующий сценарий так что вместо набрав мое имя, он узнает его, когда я схожу с моей машины. Это напоминает мне .... Я обновил вопрос '$ SSH_CLIENT' - это параметр времени выполнения, который я могу получить, если я наберу набор в bash. – Radek

Смежные вопросы