2016-06-02 10 views
6

Qualcuno può aiutarmi per favore con quello che sto facendo male qui, mi ha graffiato la testa per un po '. Non conosco molto perl solo facendo una piccola modifica a uno script irssi.Perl input utente per comando unix

  $selectedname = <STDIN>; 
      $Nameslist = `grep -i -w '$selectedname'~/file`; 

che funzioni correttamente il problema che sto avendo è sembra che la variabile non viene inserita correttamente. Per esempio se scrivo lo stesso comando usando la parola test nella linea di comando ottengo 3 linee che appaiono. Ma se uso la stessa parola con questo script, risulta vuoto.

So che funziona correttamente perché posso fare * come input e mi mostrerà l'intero file. Non funziona solo con le stringhe inserite.

Qualsiasi aiuto sarebbe molto apprezzato, questo mi ha davvero bloccato.

+4

Righi da STDIN sono seguiti da ritorni a capo, è possibile togliere utilizzando la funzione chomp: [ 'chomp -f perldoc '] (http://perldoc.perl.org/functions/chomp.html) –

+1

Questo è stato perfetto, grazie. – BloodLines

+0

Poiché le virgolette singole vengono utilizzate attorno alla variabile, la variabile non deve essere interpolata? – SilentMonk

risposta

1

In realtà quando si utilizza <STDIN>, è in arrivo un nuovo carattere di linea. quindi è necessario rimuovere il carattere della nuova riga. è possibile utilizzare Chomp per rimuovere il carattere di nuova riga

Codice:

$selectedname = <STDIN>; 
    chomp($selectedname); 
    $Nameslist = `grep -i -w '$selectedname'~/file`; 
Problemi correlati