我需要将正则表达式替换作为变量传递:
sub proc {
my $pattern = shift;
my $txt = "foo baz";
$txt =~ $pattern;
}
my $pattern = 's/foo/bar/';
proc($pattern);
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用.我试着评估替换:
eval("$txt =~ $pattern;");
Run Code Online (Sandbox Code Playgroud)
但那也不起作用.我在这里错过了多么可怕的事情?
我正在开发一个处理与远程进程交互的类,该进程可能有也可能不可用; 实际上在大多数情况下它不会.如果不是这样,那个阶级的对象在生活中没有任何目的,需要消失.
它不那么难看:
connect()方法中处理连接设置,如果进程不存在则返回错误代码.在选项1)中,调用代码当然必须包装该类的实例化以及在try()块中处理它的所有其他内容.在选项2中,它可以简单地检查connect()的返回值,如果失败则返回(销毁对象),但它不太符合RAII,
相关地,如果我使用选项1),最好抛出一个std :: exception类,从中派生我自己的异常类,滚动我自己的未完成的异常类,或者只是抛出一个字符串?我想包括一些失败的迹象,这似乎排除了第一个失败.
编辑澄清:远程进程在同一台机器上,因此::connect()呼叫阻止的可能性很小.
所以我有这个库代码,请看......
class Thing
{
public:
class Obj
{
public:
static const int len = 16;
explicit Obj(char *str)
{
strncpy(str_, str, len);
}
virtual void operator()() = 0;
private:
char str_[len];
};
explicit Thing(vector<Obj*> &objs) : objs_(objs) {}
~Thing() {
for(vector<Obj*>::iterator i = objs_.begin(); i != objs_.end(); ++i) {
delete *i;
}
}
private:
vector<Obj*> objs_;
}
Run Code Online (Sandbox Code Playgroud)
在我的客户端代码中......
class FooObj : public Thing::Obj
{
virtual void operator()() {
//do stuff
}
}
class BarObj : public Thing::Obj
{
virtual void …Run Code Online (Sandbox Code Playgroud)