2015-05-14 87 views
-2

我有一個名爲grepText的子例程,它只是簡單地從另一個變量中擦除一個文本。我正在嘗試分割輸出。是否有可能將grepText的輸出作爲參數直接分割?而不是首先將grepText的值放入變量中? grepText返回一個字符串。Perl - 子例程參數是另一個子例程調用

什麼,我試圖做的是:

$output = (split ":", grepText("findThis", $Alltext))[1]; 

grepText如下

sub grepText(){ 
my @text = split "\n", $_[1]; 
my $output = grep /$_[0]/, @text; 
return $output; 
} 

這是行不通的。錯誤是

Too many arguments for main::grepText at a line 115, near "$Alltext)" 
+2

不grepText返回一個字符串?你看到了什麼樣的錯誤? –

+2

@ChrisS:任何Perl子程序都會返回一個字符串,如果你這樣對待 – Borodin

+0

「它不起作用」不會給我們任何有用的東西繼續。你究竟看到了什麼意外的行爲? –

回答

1

很可能通過輸入子程序的任何perl函數直接不使用perl變量。

我認爲問題可能與您的「grepText」子程序。要詳細調試此問題,需要更多信息。

我曾嘗試你的日常,我能得到所需要的輸出:

#!/usr/bin/perl 
sub grepText 
{ 
return "hello:world"; # returns a test string 
} 

my $output = (split ":", grepText($textToFind, $Alltext))[1]; 
print "$output"; 

輸出:

world 
+0

得到了問題..我正在使用原型,我不應該這樣做。 !謝謝 – Muzammil

1

當然可以。但正如你寫的grepText正在獲取一些奇怪的參數。在

(split ":", grepText(/$textToFind/, $Alltext))[1]; 

你打電話grepText(/$textToFind/, $Alltext)這是搜索的$textToFind在全局變量$_的價值,並在列表背景下,插入一個空列表()或含1 (1)到參數列表

所以你打電話grepText($Alltext)grepText(1, $Alltext)取決於$_是否包含在$textToFind

的正則表達式我敢肯定這不是你想要做什麼,所以一些更多的信息會很好!

然而,無論grepText回報將在冒號:(split ":", grepText(...))[1]拆分會給你第二個冒號分隔的領域,這似乎是你問

+0

grepText返回一個字符串,對不起,我打錯了第一行代碼(編輯原始問題)...如果我必須通過grepText的弦輸出來分裂..代碼中的變化是什麼? – Muzammil

+0

@Muzammil:你所做的改變使它工作得很好,並且完全按你的要求做。如果你需要更多的幫助,那麼你必須顯示'grepText'的代碼,並描述它返回的字符串,以及你想要的結果和你得到的結果。我們不能用***做很多事情,它不起作用*** – Borodin

相關問題