2011-09-08 71 views
2

我想创建一个文件路径出预定路径和一个变量,这是预先确定的路径内的文件夹。为什么我的输出在两行上打印?

路径的预定部分是/sys/kernel/scst_tgt/targets/iscsi/

下一个文件夹是像iqn.2011-08.com.solignis:datastore2

的地址为iSCSI目标然后最后部分是一样的东西/enabled其是讲述了的状态的文件目标。

当我尝试打印完整路径并将变量$target_name替换为iSCSI目标的名称时。生成的输出如下所示

/sys/kernel/scst_tgt/targets/iscsi/iqn.2011-08.com.solignis:datastore2 
/enabled 

它将启用的部分置于新行。我无法弄清楚什么是对

去下面是子程序我工作的代码:它看起来像$ TARGET_NAME

sub target_enabled { 
    my $target_name = shift; 
    my $target_state_file = "/sys/kernel/scst_tgt/targets/iscsi/$target_name/enabled"; 
    print "$target_state_file\n"; 
} 

回答

8

看起来你在$target_name的末尾有换行符。所以:

chomp $target_name; 

如果不工作(因为你可以从Windows文件有例如\r\n):

$target_name =~ s/\s+\z//; 
+0

'chomp'ing $ target_name修复了它,谢谢你的帮助。 – ianc1215

+0

@Sol不客气。 – TLP

+0

@TLP - “比必要的更多的代码”距离“不够高尔夫球”足够短的距离。使用@_而不分配给变量会导致可读性明显降低,代码可维护性降低,因此不应该鼓励您将其作为练习,对不起。 – DVK

0

已在最后一个换行。检查子程序调用者的参数。

(编辑:)您可以使用chop删除换行符,如果它始终存在。

chop $target_name; 
+0

['chomp'(HTTP://perldoc.perl。 org/functions/chomp.html)是'chop'的安全版本。 – TLP

+0

所以除非我需要特别的剁碎,chomp会更好? – ianc1215

+1

'chop'删除字符串中的最后一个字符,不管它是什么。 'chomp'只删除与输入记录分隔符'$ /'的当前值相匹配的字符。大多数系统上都是'\ n'。 – TLP