NAME

PDK::Config::Context::Static - 静态配置内容处理器

VERSION

0.001

SYNOPSIS

use PDK::Config::Context::Static;

my $config = PDK::Config::Context::Static->new(
    id     => 1,
    name   => 'config-01',
    vendor => 'cisco',
    config => [
        'interface GigabitEthernet0/0',
        ' ip address 192.168.1.1 255.255.255.0',
        ' no shutdown',
    ]
);

# 遍历配置行
while (my $line = $config->nextUnParsedLine) {
    print "处理行: $line\n";
}

DESCRIPTION

这是一个静态配置内容处理器,实现了 PDK::Config::Context::Role 角色。 该类提供了对配置文件的解析、遍历和状态跟踪功能。

主要功能包括: - 配置内容的存储和管理 - 逐行解析配置内容 - 解析状态跟踪(已解析/未解析) - 配置签名生成(MD5 哈希) - 时间戳管理 - 光标位置控制

ATTRIBUTES

config

配置内容数组引用,必需属性。包含配置的每一行。

is       => 'ro',
isa      => 'ArrayRef[Str]',
required => 1,

confContent

配置内容字符串,只读属性,延迟构建。通过连接配置数组生成。

is      => 'ro',
isa     => 'Str',
lazy    => 1,
builder => '_buildConfContent',

cursor

当前光标位置,读写属性,默认值为 0。

is      => 'rw',
isa     => 'Int',
default => 0,

confSign

配置签名,继承自角色,延迟构建。使用 MD5 哈希算法生成配置内容的唯一标识。

timestamp

时间戳,继承自角色,自动构建。记录配置处理的时间。

lineParsedFlags

行解析标志数组,继承自角色。跟踪每一行的解析状态。

METHODS

goToHead

将光标移动到配置开头。

$config->goToHead;

nextLine

获取下一行配置内容。如果已到达文件末尾,返回 undef。

my $line = $config->nextLine;
if (defined $line) {
    print "当前行: $line\n";
}

prevLine

移动到上一行配置。如果已在开头,返回 undef 并输出警告。

my $line = $config->prevLine;
if (defined $line) {
    print "上一行: $line\n";
}

nextUnParsedLine

获取下一个未解析的行。自动跳过已解析的行和空行,并自动标记为已解析。

while (my $line = $config->nextUnParsedLine) {
    print "未解析行: $line\n";
    # 处理该行...
}

backtrack

回溯到上一行并标记为未解析。用于重新处理某行配置。

my $success = $config->backtrack;
if ($success) {
    print "成功回溯\n";
}

ignore

忽略当前行(标记为已解析并移动到下一行)。等同于回溯后移动到下一行。

$config->ignore;

getUnParsedLines

获取所有未解析的行,返回连接后的字符串。

my $unparsed = $config->getUnParsedLines;
print "未解析内容:\n$unparsed\n";

getParseFlag

获取当前行的解析标志。返回 0(未解析)或 1(已解析)。

my $flag = $config->getParseFlag;
if ($flag == 0) {
    print "当前行未解析\n";
}

setParseFlag

设置当前行的解析标志。

$config->setParseFlag(1);  # 标记为已解析
$config->setParseFlag(0);  # 标记为未解析

PRIVATE METHODS

_buildConfSign

使用 MD5 哈希算法构建配置签名。

_buildConfContent

通过连接配置数组构建配置内容字符串。

_buildTimestamp

使用 Time::Piece 模块构建时间戳,格式为 "YYYY-MM-DD HH:MM:SS"。

_buildLineParsedFlags

构建行解析标志数组,初始化为全 0(未解析状态)。

DEPENDENCIES

- Moose - namespace::autoclean - Digest::MD5 - Time::Piece (Perl 核心模块) - Encode - Encode::Guess - PDK::Config::Context::Role

EXAMPLES

基本用法

use PDK::Config::Context::Static;

my $config = PDK::Config::Context::Static->new(
    id     => 1,
    name   => 'cisco-router',
    vendor => 'cisco',
    config => [
        'interface GigabitEthernet0/0',
        ' ip address 192.168.1.1 255.255.255.0',
        ' no shutdown',
        'interface GigabitEthernet0/1',
        ' ip address 10.0.0.1 255.255.255.0',
        ' no shutdown',
    ]
);

# 获取配置签名
print "配置签名: " . $config->confSign . "\n";

# 遍历所有未解析的行
while (my $line = $config->nextUnParsedLine) {
    print "处理: $line\n";
}

解析状态跟踪

# 处理第一行
my $line1 = $config->nextUnParsedLine;
print "第一行: $line1\n";

# 如果需要重新处理,可以回溯
$config->backtrack;
$line1 = $config->nextUnParsedLine;  # 重新获取同一行

# 继续处理剩余行
while (my $line = $config->nextUnParsedLine) {
    print "继续处理: $line\n";
}

AUTHOR

careline <968828@gmail.com>

COPYRIGHT AND LICENSE

Copyright (c) 2025 careline

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.