这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 filepp,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
filepp - 通用文件预处理器
概要
文件 [选项] 文件名
商品描述
文件 是一个通用的文件预处理器,旨在允许由
C 预处理器 CPP(1) 可用于任何文件类型。 文件 被设计成很容易
定制和扩展。
配置
文件 接受以下命令行选项:
-b 抑制源自包含文件的空行(这对顶部没有影响
级文件)。
-c 从 STDIN 而不是文件读取输入。 注意:如果两者 -c 和输入文件是
指定,两者都按给定的顺序用作输入。
-D宏
预定义 宏 定义`1'.
-D宏=定义
预定义 宏 有一个定义 定义.
-d 输出调试信息。
-dd 输出详细的调试信息。 此选项显示所有正常调试
信息,以及每次列表更改时定义的宏的完整列表。
先生 输出灯光调试信息。 此选项显示最少的调试
信息。
-dpre坦克
在所有调试信息前加上 坦克 (可以是字符或字符串),可以是
用于使调试更易于阅读。
-dpost坦克
Postfix所有调试信息 坦克 (可以是字符或字符串),这个
默认为换行符。 如果 坦克 不包含换行符,则不会有换行符
调试消息后打印。 (可以放入换行符 坦克 使用
__NEWLINE__ 宏。)
-ds 在 stdout 而不是 stderr 上打印调试信息。
-e 将所有环境变量定义为带前缀的宏 环境字符.
-ec 坦克
选择 环境字符 (定义为宏的环境变量的前缀)到 坦克, 默认
至 $. (注意:此选项仅在环境变量设置时生效
转换为宏)。
-ecn 选择 环境字符 (定义为宏的环境变量的前缀)为空(没有
前缀)。
-h 显示选项摘要。
-IDIR 追加目录 DIR 到搜索包含文件的目录列表。
-宏 文件
从宏中读取 文件,但会丢弃文件中的所有其他内容。
-k 关闭所有关键字的解析。 如果您只想使用宏,这很有用
扩建设施 文件. 使用此选项,找到的所有关键字都将是
忽略, 文件 将只替换指定的任何宏 -D宏=定义
选项。
-kc 坦克
将关键字前缀字符设置为 坦克 (也可以是字符串)。 全部 文件 关键词
以字符为前缀 # 默认情况下。 此选项允许前缀为
变成了别的东西。
LC 坦克
将行继续符设置为 坦克 (也可以是字符串)。 当线
接续符后面有一个换行符,它和换行符是
由行继续替换字符替换。 默认是 \ (CPP(1)
风格)。
-lec 坦克
将可选的关键字行结束字符设置为 坦克 (也可以是字符串)。 这个
允许在包含关键字的行的末尾放置额外的字符。
多余的字符将被忽略。 如果要使用关键字,这很有用
嵌入在 HTML 或 C 风格的注释中。 例如,在 HTML 中嵌入关键字
注释关键字前缀字符可以设置为 <--!# 和可选关键字
行结束字符设置为 - >. 一个示例关键字将是:
<!--#include “头文件.h” - >
在可选关键字行结束字符的情况下 - > 将被忽略。
-lr 坦克
将换行符设置为 坦克 (也可以是字符串)。
默认为空字符串 (CPP(1) 风格)。
-lrn 将换行符设置为换行符。
-m 模块.pm
加载模块 模块.pm. 模块.pm 是一个 perl的(1) 可用于扩展的模块
或修改行为 文件. 见部分 档案 课程结构 详情
filepp 包含的模块和 档案 模块 API 有关如何编写您的详细信息
自己的模块。
-MDIR 追加目录 DIR 到搜索 filepp 模块的目录列表。 这个
list 默认为安装 filepp 模块的目录(如果有)加上
默认 Perl 模块路径。 (注意:这会将目录添加到 Perl @INC 列表中。)
-mp 坦克
为所有宏添加前缀 坦克. 宏以正常方式定义,但只会
找到前缀时替换 坦克. 例如,filepp 宏的行为
类似于 Bourne shell (sh(1)) 变量如果 坦克 被设置为 $.
-mpnk 关闭关键字内的宏前缀。 当使用宏前缀字符时
option 允许在关键字处理中使用没有前缀的宏。 为了
例如,如果宏前缀是 $ 然后和 #如果 将写为:
#如果 $宏 == 1
使用 mpnk 选项允许 #如果 写成:
#如果 MACRO == 1
-o 姓名
将输出写入 姓名 而不是标准输出。 如果只有一个输入文件并且它有
与输出文件同名,原始输入文件将备份为
名字~.
-ov 覆盖模式,导致输出文件覆盖输入文件。 有用的时候
一次修改大量文件,例如:
文件 -ov -DTHIS=那个 *
原始输入文件将被备份为 名字~.
-ovc IN=OUT
类似于覆盖模式,不同的是输出文件名是输入文件名
- IN 部分转换为 OUT. 例如,要处理所有结尾的文件集
使用 .in 并让输出文件都以 .out 结尾:
文件 -ovc.in=.out *.in
在这种情况下,一个名为的文件 测试输入 将被处理,输出文件将是
检验出. 注意:如果输入文件不包含 IN 然后输出文件将
与输入文件同名,原始输入文件将被支持-
作为 名字~!
-铅 保留空行。 使用此选项会尝试在
输出文件和输入文件一样,所以所有通常不会的空行
打印出来。 在比较输入文件和输出时很有用。
-回覆 将关键字和宏前缀字符以及行继续符视为 Perl
正则表达式而不是普通字符串。
-s 运行 文件 在安全模式下。 这将关闭 编译 关键词。
-U宏
取消之前定义的 宏.
-u 取消定义所有当前定义的宏,包括预定义的宏。
-v 显示程序版本。
-w 替换宏时打开字边界。 当字边界打开时,宏
仅当宏作为单词出现在文本中时才会被替换。 例如,通过
默认 宏 将在以下两种情况下替换为:
宏 as 字, 宏NOTaword
但只有第一次出现会被替换为 -w 选项。
启用此选项 文件 只会替换包含字母数字的宏
人物。 使用 Perl 的可以支持国际(非 ASCII)字符集
语言环境处理。
关键词
文件 支持以下关键字:
的#include <文件>
在正在处理的文件中包含一个文件。 此变体用于“系统”
包含文件。 它搜索名为的文件 文件 在目录列表中
由您指定。 目录是用命令选项“-I”指定的。 文件
不预定义任何用于搜索文件的系统目录。
的#include “文件”
在正在处理的文件中包含一个文件。 此变体用于包含文件
你自己的项目。 它搜索名为的文件 文件 在当前的第一个
目录,然后在用命令选项“-I”指定的目录列表中。
当前目录是基本输入文件所在的目录。
#定义 宏
定义宏 宏 有'1'的定义。 宏 然后可以与
关键词 #ifdef 和 #ifndef.
#定义 宏 定义
定义宏 宏 要有价值 定义. 宏 然后可以与
关键词 #ifdef 和 #ifndef. 此外,所有实例 宏 继 #定义
语句将被替换为字符串 定义. 字符串 定义 被认为是
下一行的所有字符 宏.
#定义 宏(arg1, arg2, ...) 定义
定义宏 宏 要有价值 定义 有论据 (arg1, arg2, ...).
宏 可以如下使用:
#定义 宏(富) 用 foo 定义
现在当更换发生时:
宏(条)
会变成:
带条的定义
宏可以有任意数量的逗号分隔参数。
如果最终的宏以 ... 结尾,宏也可以有可变数量的参数,
例如:
#定义 错误(字符串, 参数...) fprintf(标准错误,字符串,参数);
这里给出的第一个参数变成 绳子 和所有其他论点将成为
ARGS. 如果调用为: 错误(“%d,%s”, i, 字符串) 它会给
fprintf(stderr, "%d,%s", i, string);
此外,如果传递的参数数量可变的宏没有参数
变量参数,然后可以选择从定义中删除逗号
在定义前加上“##”。 例如:
#定义 错误(字符串, 参数...) fprintf(标准错误,字符串,##args);
如果这被称为: 错误(“空”) 那么结果将是:
fprintf(stderr, "空");
前面的逗号 ##参数 已被删除。
#如果 表达式
一个条件语句, 表达式 将被评估为真 (1) 或假 (0)。 如果 表达式
评估为真,之间的文本 #如果 而下一个 的#else or #ENDIF 会
包括。 如果 表达式 评估为假,之间的文本 #如果 而下一个 的#else
or #ENDIF 将被忽略。 表达式 可以使用所有常用的 cpp 样式比较 (==,
!=、<、> 等)。 多重比较可以与和 (&&) 和或 (||) 结合使用。
- 定义 关键字还可用于检查是否定义了宏。 例如:
#如果 定义 宏 && 宏 == 定义
注意:filepp 的 #如果 不以完全相同的方式工作 CPP(1) 的 #如果. CPP(1) 的
#如果 只做数字风格的比较。 菲尔普的 #如果 语句也可以比较
字符串和正则表达式使用 perl的(1)的全系列comaprison
操作。 例如,要测试两个字符串是否完全相等,请使用:
#如果 “宏” eq “细绳”
测试字符串是否不相等使用 ne 而不是 eq. 正则表达式可以
还可以进行测试,例如测试宏中是否有任何空格,请使用:
#如果 “宏” =~ /\s/
测试宏中是否没有任何空格 =~ 可以替换为 !~.
Perl专家: #如果 通过首先解析工作 表达式 等加工。为 定义 关键字和检查
如果定义了它所引用的宏,则将其替换为 1 如果是,则将其替换为 0
不是。 然后它检查 表达式 对于任何其他宏并用它们的替换它们
定义。 终于通过了 表达式 通过 Perl 的 评估 函数,它返回
对或错。
#elif 表达式
#elif 代表“否则如果”。 喜欢 的#else,它位于 a 的中间
#如果[n][DEF]-#ENDIF 配对并细分它; 它不需要匹配 #ENDIF of
它自己的。 喜欢 #如果, #elif 指令包括要测试的表达式。
#ifdef 宏
条件语句,如果 宏 已经定义了之间的文本 #ifdef 和
下一个 的#else or #ENDIF 将被包括在内。 如果 宏 尚未定义文本
之间的 #ifdef 而下一个 的#else or #ENDIF 将被忽略。
#ifndef 宏
的相反情况 #ifdef 有条件的。
的#else - 的#else 指令可以添加到条件中以提供替代文本
条件为假时使用。
#ENDIF 用于终止条件语句。 正常处理在
#ENDIF.
#undef 宏
取消定义先前定义的宏。
#错误 MESG
原因 文件 以错误消息退出 MESG.
#警告 MESG
原因 文件 发出警告信息 MESG.
#COMMENT MESG
As 文件 应该是一个通用的文件预处理器,它不能支持任何
已知的注释样式,因此它使用此关键字定义自己的样式。 所有线路
从...开始 #COMMENT 被视为评论并被删除 文件.
#pragma 文件 function arg1, arg2, ...
- #pragma 紧随其后的关键字 文件 允许用户
在解析期间执行 Perl 函数。 紧随其后的词 文件 is
作为函数的名称,该行的其余部分被视为一个
逗号分隔的函数参数列表。 任何 文件 内部
功能(见章节 档案 模块 API) 可以用 #pragma 关键词。
警告: 允许任意功能存在明显的安全风险
运行,因此添加了 -s(安全模式)命令行选项,可将
#pragma 关闭关键字。
预定义 宏
文件 支持一组预定义的宏。 所有预定义的宏都是这样的形式
__宏观__,其中 MACRO 是:
文件 此宏扩展为当前输入文件的名称。
LINE 此宏扩展为当前输入行号。
日期 此宏扩展为一个字符串,描述预处理器所在的日期
正在运行。 该字符串包含 29 个字符,看起来像“Oct 2012 XNUMX”。
ISO_日期
此宏扩展为一个字符串,描述预处理器所在的日期
正在运行。 字符串采用 ISO 8601 (YYYY-MM-DD) 指定的格式,并且
看起来像“2012-10-29”。
时间 此宏扩展为一个字符串,描述预处理器执行的时间
正在运行。 该字符串包含八个字符,看起来像“02:35:47”。
基础文件
此宏扩展为主输入文件的名称。
包括_LEVEL
这个宏扩展为一个十进制整数常量,表示深度
嵌套在包含文件中。 这个宏的值在每个 的#include
指令并在文件的每个结尾递减。
新线
此宏扩展为换行符。
TAB 此宏扩展为一个选项卡。
无 这个宏扩展为空。 如果你想定义一些东西,这很有用
什么都没有。
VERSION
这个宏扩展为一个字符串常量,它描述了版本号
文件. 该字符串是由句点分隔的十进制数字序列,看起来
比如“1.8.0”。
文件PP_INPUT
此宏扩展为字符串常量,表示文件已生成
自动从当前 基础文件 看起来像“自动生成
来自 ./filepp.1.in by filepp”。
档案 课程结构
以下模块包含在主要的 filepp 发行版中:
用于 模块 - 为.pm
for 模块实现了一个简单的 for 循环。 它的文件名是 为.pm.
for 循环在功能上类似于其他编程语言的功能,例如
Perl 或 C。它有一个单独的变量(一个 filepp 宏),它被分配了一个数字
价值。 该数值在每次迭代时按设定的增量变化
环形。 当值不再通过比较测试时,循环终止。
for 模块实现了以下关键字:
#对于 宏 开始 我们的 end 增量
- #对于 关键字在功能上等效于以下 Perl 或 C 样式循环:
为(宏=开始; 宏 我们的 end; 宏+=增量)
- #对于 关键字需要以下空格分隔的参数:
宏 : for 循环应为其分配数字的宏的名称
计算值。
开始 : 价值 宏 应该在循环开始时分配。 开始 应该
是一个数值。
我们的 : 当前值之间的比较 宏 和价值
end 确定循环何时终止。 有效值 我们的 是 <,
>、>=、<=。
end : for 循环将在测试时终止
宏 我们的 end
将失败。 end 应该是一个数值。
增量 : 要增加的值 宏 在循环的每次迭代中。 在末尾
每次迭代的值 增量 被添加到当前值 宏.
增量 应该是一个数值。
#endfor
- #endfor 关键字用于表示循环的结束。 内的一切
开放 #对于 和闭幕 #endfor 将在每次迭代时处理
环。
用法示例:
#对于 计数器 10 > 1 -2.5
COUNTER
#endfor
在上面的例子中,COUNTER 将被定义为每个值分别为 10、7.5、5 和 2.5
通过循环进行连续迭代。
嵌套循环也是可能的,因为在循环内更改宏的值。
开始, end 和 增量 应该都是数值,但是可以使用
宏代替,前提是宏被定义为具有数值。
前锋 模块 - foreach.pm
foreach 模块实现了一个简单的 foreach 循环。 它的文件名是 foreach.pm.
foreach 循环在功能上类似于其他编程语言的功能,例如
作为 Perl。 它需要一个由用户可定义的分隔符 (',' by
默认)。 然后它遍历列表中的所有值,定义一个宏作为每个
循环每次迭代的单独值。 当所有值都具有时循环终止
被使用。
foreach 模块实现了以下关键字:
#foreach 宏 名单
- #foreach 关键字在功能上等效于以下 Perl 样式循环:
的foreach 宏 (分裂(/DELIM/, 名单))
- #foreach 关键字需要以下空格分隔的参数:
宏 : foreach 循环应该分配当前的宏的名称
列表值。
名单 : 值列表,由 DELIM (见 #foreachdelim 关键字如何
集 DELIM). 名单 也可以是宏或包含宏。
循环将从 #foreach 下一个关键字 #endforeach 关键词。
#endforeach
- #endforeach 关键字用于表示循环的结束。 里面的一切
开幕 #foreach 和闭幕 #endforeach 将在每个
循环的迭代。
用法示例:
#foreach 价值一、二、三、四
VALUE
#endforeach
在上面的例子中,VALUE 将被定义为具有值一、二、三和四
通过循环的每次连续迭代。
嵌套循环也是可能的。
#foreachdelim /DELIM/
- #foreachdelim 关键字用于设置每个列表中使用的分隔符。 这
分隔符可以是任何字符、字符串或正则表达式。 分隔符应该
用正斜杠括起来,与 Perl 正则表达式的风格相同。
的默认值 DELIM 是 ','。 要将分隔符设置为单个空格,请执行以下操作:
#foreachdelim //
设置 DELIM 要成为任意数量的空白,请执行以下操作:
#foreachdelim /\s+/
有关更高级的用法,请参阅有关正则表达式的 Perl 文档。
文字 模块 - 文字.pm
文字模块防止出现在文字字符串中的宏被替换。 一种
文字字符串定义为具有以下形式:
“文字 绳子 - 宏 在”
在上面的示例中, 宏 不会被替换。
可以通过定义宏来逆转字面量模块的行为 LITERAL_REVERSE 字面意思
在加载模块之前,例如:
文件 -DLITERAL_REVERSE 字面意思 -m 文字.pm
这具有仅替换出现在字符串中的宏的效果。
托普 模块 - 下午
toupper 模块将所有小写字母转换为大写字母。
降低 模块 - 降低.pm
tolower 模块将所有大写字母转换为小写字母。
C / C ++ 评论 模块 - c-评论.pm
c-comment 模块删除了所有 C 风格:
/* 评论 */
和 C++ 风格:
// 评论
来自文件的评论。 C 和 C++ 注释在处理关键字后被删除。
如果您希望在处理关键字之前删除 C 和 C++ 注释,请定义宏
删除_C_COMMENTS_FIRST 在加载模块之前,例如:
文件 -DREMOVE_C_COMMENTS_FIRST -m c-评论.pm
HASH 评论 模块 - 哈希评论.pm
hash-comment 模块删除样式的所有注释:
# 评论
从一个文件。 这是 Perl、Bourne Shell、C Shell 和许多使用的注释样式
其他程序和配置文件。 关键字有后哈希注释被删除
被处理。 如果您希望在处理关键字之前删除散列注释,请定义
宏 REMOVE_HASH_COMMENTS_FIRST 在加载模块之前(注意:如果你这样做并且
也使用 # 作为关键字字符,那么关键字将在它们出现之前被删除
处理)。
功能 模块 - 函数.pm
函数模块允许用户编写调用 Perl 函数的宏。 它的文件名
is 函数.pm.
功能模块允许以下形式的宏:
宏(arg1, arg2, arg3, ...)
要添加到文件中。 找到宏后,它将从 Perl 运行一个函数
模块,带参数 参数1, 参数2, 参数3, ... 传递给函数。 该函数必须
返回一个字符串。 返回的字符串将替换输出中对函数的调用。
该函数可以有任意数量的参数。 如果函数没有参数,它应该
使用空参数列表调用:
宏()
如果这个词 宏 在输入文件中找到,后面没有跟 ( 这将是
忽略了。
要使用函数模块,用户必须提供一个 Perl 函数,它可以选择接受
在参数中并返回一个字符串。 该函数可以是 filepp 的内部函数之一
Perl 模块中提供的功能或用户自己的功能之一。 可以添加功能
有两种方式。 第一种方式是通过 function 关键词:
#功能 宏 function
宏 是宏的名称,用于表示对函数的调用
输入文件和 function 是要调用的函数的名称。
添加函数的第二种方法是调用Perl函数:
函数::添加函数($宏,$函数)
具有相同的输入 function 关键词。
可以通过关键字删除函数:
#rm函数 宏
或通过 Perl 函数
函数::移除函数($宏)
数学 模块 - 数学.pm
该模块提供了一组执行数学运算的宏。 当。。。的时候
宏在输入文件中遇到,它们被评估并返回结果
输出。
数学模块包括以下宏:
添加(一个, b, c, ...)
接受任意数量的参数并返回它们的总和:(a + b + c + ...)
子(一, b)
返回 a 减 b:(a - b)
数(一, b, c, ...)
接受任意数量的参数并返回它们的乘积:(a * b * c * ...)
div(一个, b)
返回 a 超过 b: (a / b)
绝对(一) 返回 a 的绝对值。
阿坦2(一个, b)
返回 -pi 到 pi 范围内的 a/b 的反正切值。
余弦(a) 以弧度为单位返回 a 的余弦值。
经验(一) 返回 e 的 a 次幂。
内部(一) 返回 a 的整数部分。
日志(一) 返回 a 的自然对数(以 e 为底)。
兰特(一)
返回范围 0 和 a 之间的随机小数。 如果省略a,
返回一个介于 0 和 1 之间的值。
罪(一) 以弧度为单位返回 a 的正弦值。
方格(一)
返回 a 的平方根。
srand(一)
为 rand() 设置随机数种子。
数学模块还将 pi 定义为 M_PI,将 e 定义为 M_E。
数学宏是使用 函数.pm 模块。 允许嵌套宏,
就像传递其他带有数字定义的宏作为参数一样。
FORMAT 模块 - 格式.pm
该模块提供了一组用于格式化字符串和数字的宏。
格式模块提供以下宏:
printf(格式, arg1, arg2, ...)
- 的printf 宏的行为方式与 Perl/C 函数 printf 相同。 它需要
在格式字符串中,后跟要打印的参数列表。 见 的printf(3) 男人
页面或 Perl 文档以获取完整的详细信息 的printf 功能。
上衣(字符串)
将输入字符串转换为大写。
toupperfirst(字符串)
将输入字符串的第一个字符转换为大写。
降低(字符串)
将输入字符串转换为小写。
tolowerfirst(字符串)
将输入字符串的第一个字符转换为小写。
substr(字符串, 抵消, 长度)
从输入中提取子串 绳子. 子字符串 行为方式与 Perl 相同
子函数。 抵消 用于指定字符串的第一个字符
输出(从字符串末尾偏移的负数), 长度 是字符串的长度
输出。 如果省略长度,则返回偏移量中的所有内容。 为了
进一步信息 子字符串 请参阅 Perl 文档。
格式宏是使用 函数.pm 模块。
大自由 模块 - 大定义.pm
bigdef 模块允许轻松定义多行宏。 它的文件名是 大定义.pm.
多行宏是定义跨越多行的宏。 这
定义这些的正常方法是在每个的末尾放置一个换行符
定义中的行。 但是,对于大型多行,这可能很烦人且不可读
宏。 bigdef 模块试图通过提供两个关键字来对此进行改进:
#bigdef 宏 定义...
- #bigdef 关键字的语法与 #定义,唯一的区别是
宏定义是宏名称之后的所有内容,包括以下所有内容
排队到下一个 #endbigdef 关键词。
#endbigdef
结束一个 bigdef。 此关键字和最后一个前一个之间的所有内容 #bigdef is
包含在宏中。
在定义中找到的任何关键字都将被评估为正常的 MACRO IS
DEFINED 和这些的任何输出都将包含在定义中。
注意:bigfunc 和 bigdef 的区别在于定义中的时间关键字是
评估。 Bigdef 在宏定义时评估它们,bigfunc 在任何时候评估它们
宏被替换。
大丰 模块 - 大函数.pm
bigfunc 模块允许轻松定义多行宏。 它的文件名是
大函数.pm.
多行宏是定义跨越多行的宏。 这
定义这些的正常方法是在每个的末尾放置一个换行符
定义中的行。 但是,对于大型多行,这可能很烦人且不可读
宏。 bigfunc 模块试图通过提供两个关键字来对此进行改进:
#bigfunc 宏 定义...
- #bigfunc 关键字的语法与 #定义,唯一的区别是
宏定义是宏名称之后的所有内容,包括以下所有内容
排队到下一个 #endbigfunc 关键词。
#endbigfunc
结束一个 bigfunc。 此关键字和最后一个前一个之间的所有内容 #bigfunc is
包含在宏中。
在定义中找到的任何关键字都将被评估为正常的 MACRO IS
REPLACED 和这些的任何输出都将包含在定义中。
注意:bigfunc 和 bigdef 的区别在于定义中的时间关键字是
评估。 Bigdef 在宏定义时评估它们,bigfunc 在任何时候评估它们
宏被替换。
防御加 模块 - defplus.pm
defplus 模块允许将额外信息附加到现有宏。 它的文件
名字是 defplus.pm.
defplus 模块允许将更多内容附加到现有宏中。 模块
实现一个关键字:
#defplus 宏 定义...
- #defplus 关键字的语法与 #定义,唯一的区别是如果
宏已经定义然后 定义 附加到现有定义
的宏。 如果宏未定义,则 #defplus 行为完全相同
方式为 #定义.
REGEXP 模块 - 正则表达式
regexp 模块允许使用 filepp 完成 Perl 正则表达式替换。 它的
文件名是 正则表达式.
Perl 正则表达式替换允许搜索和搜索正则表达式
用别的东西代替。 正则表达式定义如下:
#正则表达式 /正则表达式/替代/
它与 Perl 语法非常相似,将执行以下 Perl 代码
在输入文件的每一行上:
$行 =~s/正则表达式/替代/g
对于不懂 Perl 的用户,这意味着替换所有出现的 正则表达式
在当前行中 替代.
正则表达式和可能的替换的完整描述超出了范围
这个手册页。 可以使用以下命令在 Perl 文档中找到更多信息:
文件 珍珠
可以定义任意数量的正则表达式。 每个正则表达式都被评估
输入文件的每一行一次。 正则表达式按照它们的顺序进行计算
被定义。
可以通过以下方式取消定义正则表达式:
#rm正则表达式 /正则表达式/替代/
这将删除指定的正则表达式。
在调试模式下,可以使用编译指示查看当前的正则表达式列表
关键词:
#pragma 文件 显示正则表达式
当不在调试模式时,这不会产生任何输出。
也可以使用命令行在命令行上定义单个正则表达式 REGEXP
宏,例如:
文件 -DREGEXP=/正则表达式/替代/ -m regexp.pm 输入文件
注意: REGEXP 宏必须在加载正则表达式模块之前定义,放入
-DREGEXP...在 -m regexp.pm 之后将不起作用。 使用命令行方法时,如果
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 REGEXP 宏被成功解析为正则表达式,它将被取消定义
处理开始前的普通 filepp 宏列表。 显然应该小心
使用命令行正则表达式在 shell 中转义特殊字符时。
BLC 模块 - 下午
Bracket Line Continuation 模块使行在有更多空位时继续
括号:“(”比右括号:“)”在一行上。 该线路将一直持续到
找到相同数量的左括号和右括号。
可以通过使用 a 转义括号来防止将括号计算为行延续
反斜杠:“\(”和“\)”。 任何带有反斜杠的括号都将被忽略
在决定是否应该继续行时,然后将反斜杠删除一次
已找到完整行。
C 宏 模块 - 宏文件
cmacros 模块会导致引用以下预定义宏的定义:
日期, 时间, 版本, BASE_FILE, 文件, (注意:预定义的宏被写成 __MACRO__)。
这使得宏更像“C”,因为 C 预处理器还在这些周围加上引号
宏。
C 宏 模块 - 程序文件
cpp 使 filepp 的行为方式类似于 C 预处理器 CPP(1)。
免责声明:filepp 并不意味着替代 C 预处理器,即使有
这个模块。 我不建议使用 filepp 作为 C 预处理器,除非你完全
了解它与真正的 C 预处理器有何不同。 filepp 与 cpp 的输出
模块将与真正的 C 预处理器不同。
抓 模块 - 下午
抓取模块用于在处理前抓取输入。 它的文件名是 下午.
抓取模块主要用于其他模块,例如for.pm和bigfunc.pm。 它
在对文件进行任何处理之前从文件中获取所有输入。 这允许其他
模块在主处理完成之前对原始输入数据进行处理。
例如,for 模块会将原始输入存储在一个循环中并在每个循环中重新使用它
处理循环的时间。
#抓住 宏 定义...
抓取模块将从抓取关键字开始抓取所有输入。
#endgrab
结束抢夺。 此关键字和最后一个前一个之间的所有内容 #抓住 会
抓取并存储以供其他模块使用。
如果需要,可以嵌套抓取。
从另一个模块调用grab时,使用以下函数:
抓取::开始抓取($开始关键字,$end关键字)
$开始关键字 是调用 StartGrab 的关键字。 $end关键字 是
抓取应该停止的关键字。
@列表=抓取::GetInput()
返回一个 Perl 列表,其中包含上次运行抓取时抓取的所有输入。
$行=抓取::GetInputLine()
返回上次开始抓取的输入文件的行号。
档案 模块 API
的行为 文件 可以通过使用模块进行修改或扩展。 文件
模块实际上是 perl的(1) 模块,本节的其余部分假设读者有
Perl 的知识。
文件 模块是 perl的(1) 扩展或修改的模块 文件任何一方的行为
调用或替换 文件的内部函数。 文件 有 Perl 包名 菲尔普
所以它的内部函数可以在模块内调用 Filepp::函数() or
只是 功能(). 任何 文件的内部函数可以从内部调用或替换
a 文件 模块,最有用的是:
调试($字符串,$号)
打印 $字符串 如果启用了调试,则作为调试信息。 $号 is
可选,可用于设置调试级别 $字符串 应该
打印,数字越小优先级越高。 命令行选项 d 打印所有
2 及以下的调试信息,选项 dd 打印 3 的所有调试信息
和下面和选项 dl 打印 1 及以下的所有调试信息。 如果
$号 未提供,默认为 1。
添加处理器($函数,$位置,$类型)
允许模块添加名为的函数 $函数 至 文件的加工链。
处理链是一组函数,它们在文件的每一行上运行
它被处理。 处理链中的默认函数是 解析关键字
它进行关键字解析和 替换定义 它进行宏替换。
可以将更多函数添加到链中,每个函数采用一个字符串
(当前行)作为输入并返回处理后的字符串作为输出。
默认情况下,或者如果 $位置 设置为 0,处理器被添加到末尾
加工链。 如果 $位置 设置为 1 处理器被添加到开始
加工链。
$类型 控制处理器的运行。 有0个选项,XNUMX
(默认):处理器在传递给处理链的所有内容上运行; 1:在
处理器仅在全线上运行; 2:处理器仅在零件生产线上运行(零件
行是关键字后的文本,例如 if 需要解析的
宏)。
以上皆是 $位置 和 $类型 是可选参数。
添加处理器之后($函数,$现有,$类型)
增加功能 $函数 直接在现有处理器之后的处理链
$现有。 如果 $现有 然后没有找到 $函数 添加到末尾
加工链。 正则表达式匹配用于比较 $现有 -
处理链中函数的名称。
$类型 是可选的。
添加处理器之前($函数,$现有,$类型)
增加功能 $函数 直接在现有处理器之前的处理链
$现有。 如果 $现有 然后没有找到 $函数 添加到开头
加工链。 正则表达式匹配用于比较 $现有 -
处理链中函数的名称。
$类型 是可选的。
移除处理器($函数)
去除处理器功能 $函数 从加工链。
$字符串=替换定义($字符串)
替换中的所有宏 $字符串 与他们的定义并返回处理
字符串。
添加关键字($字符串,$函数)
添加关键字命名 $字符串. 当在文本处理中找到关键字时
函数名 $函数 将与传递的关键字之后的所有内容一起运行
作为一个单一的论点。
删除关键字($字符串)
删除名为的关键字 $字符串.
删除所有关键字()
删除当前定义的所有关键字 文件 (用于 -k 命令行
选项)。
添加Ifword($字符串)
添加关键字命名 $字符串 到 Ifword 列表。 Ifword 接受以下字符串
关键字并可选择对其进行解析,如果字符串解析为 true,则返回 1
和 0 为假。 默认的 Ifwords 是 if, 如果定义 和 如果定义.
删除Ifword($字符串)
删除关键字命名 $字符串 来自 Ifword 列表(注意:这不会删除
关键字,使用 删除关键字 为了那个原因)。
添加其他字($字符串)
添加关键字命名 $字符串 到 Elseword 列表。 一个 Elseword 接受字符串
跟随关键字并可选择解析它,如果字符串解析,则返回 1
为真,0 为假。 默认的其他词是 其他 和 ELIF.
删除其他字($字符串)
删除关键字命名 $字符串 来自 Elseword 列表。
添加Endifword($字符串)
添加关键字命名 $字符串 到 Endifword 列表。 Endifword 应该返回一个 1 到
表示成功终止 if 块。 如果 Endifword 返回 0
Endifword 被忽略,filepp 假定当前的 if 块在
结束词。 默认的 Endifword 是 ENDIF.
移除Endifword($字符串)
删除关键字命名 $字符串 来自 Endifword 列表。
添加包含路径($字符串)
添加包含路径 $字符串 到要搜索的目录列表包括
文件(用于 -I 命令行选项)。
添加模块路径($字符串)
添加路径 $字符串 到要搜索 filepp 模块的目录列表(使用
对于 -M 命令行选项)。
添加OpenInputFunc($函数)
添加一个 $函数 到每次新的基本输入文件时要运行的函数列表
打开了。
添加关闭输入函数($函数)
添加一个 $函数 到每次新的基本输入文件时要运行的函数列表
关闭了。
添加OpenOutputFunc($函数)
添加一个 $函数 到每次输出文件时要运行的函数列表
开了
添加关闭输出函数($函数)
添加一个 $函数 到每次输出文件时要运行的函数列表
关闭。
添加输入文件($字符串)
将另一个输入文件添加到要处理的文件列表中(用于添加输入
命令行中的文件)。
更改输出文件($字符串)
关闭当前输出文件并尝试打开一个名为 $字符串.
设置关键字字符($字符串)
将初始关键字字符设置为 $字符串 (用于 -kc 命令行选项)。
设置Contchar($字符串)
将行继续符设置为 $字符串 (用于 -lc 命令行选项)。
设置Contrepchar($字符串)
将行继续替换字符设置为 $字符串 (用于 -lr 命令
线选项)。
设置OptLineEndchar($字符串)
将可选的关键字行结束字符设置为 $字符串 (用于 -lec 命令
线选项)。
设置空白补给(1/0)
打开/关闭空白行抑制(1 = 抑制,0 = 不抑制)。 什么时候
空行抑制开启,输入文件中的空行不会被复制到
输出。 与相应的命令行选项 (-b) 不同,该函数还可以
在顶级文件中生效。 空行抑制设置适用
到正在处理的当前文件和当前文件中包含的所有文件。
重置空白补给()
将空行抑制重置为命令行指定的值。 这仅
影响正在处理的当前文件中空行的输出以及所有
当前文件中包含的文件。 在顶级文件中,这总是变成
空行抑制关闭。
设置饮食轨迹($字符串)
If $字符串 是一个宏,每当宏被替换时,
宏的替换和行上的下一个字符将被吃掉。 例如,
如果宏 FOO 被定义为 酒吧 和 FOO 已经被设定为吃掉它的踪迹,
在以下:
吃我的 foo 小径
被替换为
吃掉我的bartrail
检查EatTrail($字符串)
如果宏返回 1 $字符串 会吃掉它的尾巴,否则为 0。
设置Envchar($字符串)
设置环境变量的前缀转换为宏(环境字符),以 $字符串
(用于 -ec 和 -ecn 命令行选项)。
定义环境()
将所有环境变量定义为带前缀的宏 环境字符 (用于 -e 命令
线选项)。
设置输出(1/0)
打开/关闭将解析的输入文件写入输出文件。 这需要 1
(输出打开)或 0(输出关闭)作为输入。 当输出关闭时,唯一的
产生的输出 文件 将是由模块生成的。
设置字边界(1/0)
打开 on(1)或 折扣(0) 替换宏时的字边界检查(用于 -w
命令行选项)。
设置字符属性(1/0)
打开 on(1)或 折扣(0) 允许关键字前缀字符和行继续字符
是 Perl 正则表达式(用于 -re 命令行选项)。
UndefAll()
取消定义所有当前定义的宏,包括预定义的(用于 -u
命令行选项)。
使用模块($字符串)
加载一个 perl的(1) 模块命名 $字符串 使用 Perl 命令 要求 (用于
-m 命令行选项)。
设置解析线结束($函数)
设置函数以确定是否应在当前行上进行行延续
至 $函数.
$字符串=获取下一行()
返回输入的下一行(在处理完续行之后)
当前正在处理的文件。 为文件结尾返回 NULL。
写($字符串)
写 $字符串 到当前输出文件。
输出($字符串)
有条件地写入 $字符串 到当前输出文件。 如果输出打开
然后写 $字符串. 使用 SetOutput 函数关闭/打开输出。
此外所有标准 文件 关键字具有等效的功能,可以选择
采取一个论点。 函数与关键字同名,只是带有一个
首字母大写(例如: #定义 绳子 调用函数 定义(绳子)).
完整的描述 解析 功能和所有其他 文件 内部函数是
超出了本手册页的范围。 这 文件 脚本得到了很好的评论,希望
Perl 程序员可读,所以使用源 Luke!
使用 onworks.net 服务在线使用 filepp