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.