2017-07-13 7 views
0
#!/bin/perl 

open($WP, ">/home/Octa.txt"); 

# Subroutine test 
sub test { 
    $var1 = shift; 
    print $WP "TESTING\n"; 
} 

# Subroutine func 
sub func { 
    $var = shift;  

    if ($var eq "Ocat") { 
     print $WP "String found\n"; 
     test($var); 
    } 
    else { 
     print $WP "String not found\n"; 
    } 
} 

$var3 = "Octa"; 
func($var3); 

を動作しない問題は、コードがtestサブルーチン内またはFUNC 『サブルーチン「のFUNC subroutine, but it prints in the else`』部分のif条件内何かを書き込むことができないということです。ファイルハンドラは、サブルーチンで

+1

単純なタイプミスのようです: '' '' '' ''で '' Ocat "'を置き換えてみてください:) –

+1

'strict'、' warnings'を使い、古い方法でファイルを開かないでください、 'open my $ in '、>'、$ filenameのように3引数' open'を使います。またはdie $ !; ' – AbhiNickz

+0

man、' test'は条件付きで呼ばれるので、常にそこにいるとは思わないよ。 –

答えて

3

最初に、$var"Ocat"に対してテストしますが、Octaを対象としています。

したがって、testサブルーチンは呼び出されず、String not foundだけが出力されます。

出力ファイルがユーザーの書き込み可能な場所にあるを修正すると、プログラムが機能します。

しかし、いくつかの改善が必要です。

通常、ユーザが/homeディレクトリに書き込むことはできないため、出力ファイル名を変更しました。

コメント

  • あなたの周りにきれいに渡すことができるとスコープされ字句ファイルハンドルを取得した場合にはopenの3引数形式を、使用することをはるかに優れています。この質問は、グローバルなファイルハンドルが物事を混乱させることができるかどうかの良い例です。

  • 常にを呼び出してください。openコールを確認してください。まず、/homeディレクトリに書き込みますか? use warnings;use strict;

上記のコメントで一緒に練習をもたらし、失敗の別の可能性があるとの

  • ください常に起動プログラム。

    通常、ファイルには/homeが書き込まれません。この場合、投稿されたプログラムは動作しません。

    しかし、我々はこれらのエラーのいずれかが表示されません(私たちは無効$WHファイルハンドルに触れるたびに印刷されるであろう)(失敗します)openのチェックなしとuse warningsなし

    。代わりに、プログラムは静かに実行して完了しますが、出力ファイルは書き込まれません。

  • +0

    ありがとうございます。しかし、 'test'と 'func'サブルーチンの 'if'条件での印刷は印刷されません。 – tester

    +0

    @tester投稿されたプログラムをそのまま試してみることはできますか?通常は、ユーザとして '/ home'に書き込むべきではありません。もしあなたがタイプミスを修正しただけでは、質問の中のコードはあなたに何も知らせません(' open'は成功をチェックしないので)。したがって、ファイルを開くことはありません。投稿したプログラムが私のために働いています。 – zdim

    +0

    @tester答えを少し編集し、最後に段落を追加しました。上のコメントがうまく説明されています。 – zdim

    関連する問題