Можно также создать бесплатную функцию в пространстве имен:
В BitParser.h
namespace BitParser
{
bool getBitAt(int buffer, int bitIndex);
}
В BitParser.cpp
namespace BitParser
{
bool getBitAt(int buffer, int bitIndex)
{
//get the bit :)
}
}
В целом это было бы предпочтительным способом записать код. Когда нет никакой потребности в объекте, не используют класс.
Уловка состоит в том, чтобы заставить m // работать в контексте списка с помощью назначения списка:
($interesting) = $string =~ m/(interesting)/g;
Это можно аккуратно расширить, чтобы захватить больше вещей, например:
($interesting, $alsogood) = $string =~ m/(interesting) boring (alsogood)/g;
Обычно вы также хотите провести тест, чтобы убедиться, что входная строка соответствует вашему регулярному выражению. Таким образом, вы также можете обрабатывать случаи ошибок.
Чтобы извлечь что-то интересное, вам также необходимо каким-то образом закрепить бит, который вы хотите извлечь.
Итак, в вашем примере это сначала обеспечит ввод строка соответствует нашему выражению, а затем извлеките бит между двумя «скучными» битами:
$input = "boring interesting boring";
if($input =~ m/boring (.*) boring/) {
print "The interesting bit is $1\n";
}
else {
print "Input not correctly formatted\n";
}
$ & - Строка, соответствующая последней успешное совпадение с образцом (не считая любые совпадения, скрытые в БЛОКЕ или eval (), заключенный в текущий БЛОК).
#! /usr/bin/perl
use strict;
use warnings;
my $interesting;
my $string = "boring interesting boring";
$interesting = $& if $string =~ /interesting/;
Я нашел ответ на это (из этой страницы ):
Библиотека bigarray реализует большие многомерные числовые массивы. Эти массивы называются «большими массивами», чтобы отличать их от стандартных массивов Caml, описанных в Модульном массиве. Основные различия между «большими массивами» и стандартными массивами Caml заключаются в следующем:
$ 1
, $ 2
и т. Д. Для доступа к захваченной строке.
if ( m/(interesting)/ ) {
my $captured = $1;
}
Вы можете использовать именованные буферы захвата:
if (/ (?<key> .+? ) \s* : \s* (?<value> .+ ) /x) {
$hash{$+{key}} = $+{value};
}