2013-07-07 5 views
0

У меня есть переменная $count, которая будет принимать десятичное значение из командной строки, и у меня есть фрагмент кода, который генерирует файлы с именем filename001 filename002 ....filename00a,filename00b и т. Д. Он добавляет шестнадцатеричное число (без 0x) до filename для каждого нового файла, который он создает.Использование шестнадцатеричных значений в переменной Perl

Я использую переменную $count, чтобы отслеживать число, добавленное к filename. Я хочу вытащить строки, содержащие конкретный текст Result: из сгенерированного файла (filename00b filename00a и т. Д.). Для этого я использую инструмент Grep следующим образом:

`grep "Result:" path to the file/filename0*$count` 

Это работает отлично, пока я не достигну 10-файл, когда 10 становится a в шестнадцатеричном, но $count в команде Grep упрощено до 10, так что Grep является не удалось найти файл. Я попытался использовать hex($count), но он, похоже, не работает. Требуется, чтобы переменная $count могла быть увеличена или уменьшена, и она по-прежнему содержит шестнадцатеричное значение. Есть ли способ сделать это?

ответ

3

hex функция в perl интерпретирует свой аргумент в виде шестнадцатеричной строки и возвращает соответствующее целое значение, например:

print hex '0xAf'; # prints '175' 
print hex 'aF'; # same 

В этом из определения hex в perldoc -f hex.

Кажется, вы хотите сделать обратное, преобразовать десятичное число в шестнадцатеричное представление. Вы можете сделать это с printf, например:

printf("%03x", 175); # prints '0af' 
printf("%03x", 0xAf); # same 

Если вы хотите, чтобы сохранить значение в переменной, используйте sprintf вместо printf, он возвращает строку, вместо того, чтобы печатать его.

+0

: Я попытался использовать sprintf, $ count теперь имеет шестнадцатеричный эквивалент десятичного числа, но когда я пытаюсь его увеличить, я получаю сообщение о том, что содержимое в переменной является строкой. Было бы неплохо, если бы метод использовал шестнадцатеричные числа непосредственно в переменной. – Gautam

+1

Целое число является целым числом, независимо от того, смотрите ли вы его в десятичной форме, шестнадцатеричный или восьмеричный - это вопрос форматирования. Храните '$ count' как число, увеличивайте или уменьшайте или манипулируйте им по своему усмотрению, а если хотите, чтобы он был отформатирован как шестнадцатеричный, используйте' sprintf'. Если вы хотите обратное и получите число обратно из шестнадцатеричного _string_, используйте функцию 'hex'' perl'. – janos

+3

@Gautam Вы должны понимать разницу между числом (как значением) и его представлением с символами (обычно называемыми цифрами). Количество x-es здесь «xxxxx» равно «5» в десятичной системе и 'V' в римской системе цифр и' 101' в двоичном формате .., когда вы увеличиваете (добавляете один) на пять x-es, вы получаете ' xxxxxx ', что есть '6' или' VI' или '110' - в зависимости от того, как вы хотите его представлять. – jm666

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