Ruby 我怎样才能逃离'@';雇员再培训局的角色?

Ruby 我怎样才能逃离'@';雇员再培训局的角色?,ruby,string,erb,Ruby,String,Erb,我正在使用 (ERB)模板。此应答文件包含变量,这些变量随后用于在静默模式下调用安装程序 我无法控制安装程序代码;我能控制的是应答文件 如果字符串包含未替换的元字符,安装程序将抛出预期的警告 我希望应答文件有一个包含转义字符的Perl字符串常量。这个值是使用嵌入式Ruby代码提供的 我有两个变量。一个是用Ruby定义的,另一个是用Perl定义的 my $variable = <%= [@var].flatten %>; 我想转义at@字符,以便Perl 不考虑 @ gmail <

我正在使用 (ERB)模板。此应答文件包含变量,这些变量随后用于在静默模式下调用安装程序

我无法控制安装程序代码;我能控制的是应答文件

如果字符串包含未替换的元字符,安装程序将抛出预期的警告

我希望应答文件有一个包含转义字符的Perl字符串常量。这个值是使用嵌入式Ruby代码提供的

我有两个变量。一个是用Ruby定义的,另一个是用Perl定义的

my $variable = <%= [@var].flatten %>;
我想转义at
@
字符,以便Perl 不考虑<代码> @ gmail < /代码>为变量。

简言之,我想将
“abcd\@gmail.com”
写入应答文件

我尝试了很多事情,但都没有成功

@var = "abcd@gmail.com"
@var.gsub("@", "\@") # => "abcd@gmail.com"
@var.gsub("@", "\\@") # => "abcd\\@gmail.com"
@var.gsub("@", "\\\@") # => "abcd\\@gmail.com"
@var.gsub(“@”,“\\@”)
是正确的。Ruby将结果表示为等效的双引号字符串,需要转义反斜杠

尝试将@var放入

@var.gsub(“@”,“\\@”)
是否正确。Ruby将结果表示为等效的双引号字符串,需要转义反斜杠



试试看,
put@var

我这么做了,但它不起作用。在所有场景中,perl变量存储:abcd@gmail.com“这反过来又让我想到了abcd.com,因为@gmail在perl上下文中没有定义(空)。作为目前的解决办法,我用[at]@var.gsub(“@“,[at]”)替换了@var,在perl代码中,我用\@:$var=~s/[at]/\\\\@/g替换了[at]@Rajneeta:您需要充分解释如何在Ruby和Perl中使用字符串。听起来你有多个逃避(你是在使用backticks还是
system
?),所以试试
@var.gsub(“@”,“\\\\@”)
,看看我编辑的问题,以反映具体的用例和场景。我想你误解了MCVE的概念。请看一看。我们的想法是你发布一个简短的程序,我们可以自己运行并查看症状。考虑到你已经准备好了大部分的作品,这应该一点也不困难。我已经准备好了,但它不起作用。在所有场景中,perl变量存储:abcd@gmail.com“这反过来又让我想到了abcd.com,因为@gmail在perl上下文中没有定义(空)。作为目前的解决办法,我用[at]@var.gsub(“@“,[at]”)替换了@var,在perl代码中,我用\@:$var=~s/[at]/\\\\@/g替换了[at]@Rajneeta:您需要充分解释如何在Ruby和Perl中使用字符串。听起来你有多个逃避(你是在使用backticks还是
system
?),所以试试
@var.gsub(“@”,“\\\\@”)
,看看我编辑的问题,以反映具体的用例和场景。我想你误解了MCVE的概念。请看一看。我们的想法是你发布一个简短的程序,我们可以自己运行并查看症状。考虑到您已经准备好了大部分内容,这应该一点也不困难。所以您正在使用Ruby生成Perl代码?什么是
[@var]。展平
应该做什么?是的。我正在使用Ruby生成Perl代码。此perl代码是一个应答文件/响应文件,以便于静默安装。“@var”是一个实例变量,可以是字符串或数组。[@var].flatte用于实现两件事:1)[@var]将字符串转换为数组。2) 如果'@var'是一个数组,那么.flatten方法将创建一个平坦的一维数组,而不是由[@var]产生的数组。您的预期结果是什么,即Perl代码应该是什么样子?那么您正在使用Ruby生成Perl代码?什么是
[@var]。flatte
应该做什么?是的。我正在使用Ruby生成Perl代码。此perl代码是一个应答文件/响应文件,以便于静默安装。“@var”是一个实例变量,可以是字符串或数组。[@var].flatte用于实现两件事:1)[@var]将字符串转换为数组。2) 如果'@var'是一个数组,那么.flatten方法将创建一个平坦的一维数组,而不是由[@var]产生的数组。您期望的结果是什么,即Perl代码应该是什么样子?
@var = "abcd@gmail.com"
@var.gsub("@", "\@") # => "abcd@gmail.com"
@var.gsub("@", "\\@") # => "abcd\\@gmail.com"
@var.gsub("@", "\\\@") # => "abcd\\@gmail.com"