2016-09-08 12 views
-4

は、ここで私はuse POSIXを持っている私のスクリプトの先頭に私のPerlコードラウンド関数を正しく使用していますか?

use POSIX; 

my @arr = split(/\\n\\n/, $content); 

my $len = length @arr; 

$len = $len/2; 

my $b = round($len) - 1; 

です。私はかつてuse Math::Roundを持っていたが、うまくいかなかった。

私はround機能を使用しようとしていますが、私はそれを呼び出すとページが壊れています。

+1

この '$ bの=はsprintf "%の.0f"、$のlen'を試してみてくださいと言いたいです。 – redneb

+0

何が問題なのですか? '$ content'とは何ですか?あなたはどんな問題を抱えていますか? – Borodin

+0

@Borodin $ contentは記事の内容です。私はそれを2つの新しい行に対して分割して渡します。奇妙なことは、私は新しいラインで私の分割が問題だと思います。 – jkushner

答えて

0

あなたはデータが空白行でブロックで構成されていると思い

前回の操作の結果である変数$contentを持っているようにあなたがやることを望んでいるものを言うことはありませんが、それは見ていますブロック間、あなたは配列@arr

の各要素にブロックを置くために4文字のシーケンス\n\nに分割しているので(配列@arrを呼び出さないでください。@は、それが配列だと言うと、それにarrを追加します以下の文字は、あなたがデータの性質を説明する機会です。あなたの配列が含まれ、それは非常に貴重な機会です。私はあなたのデータが何を含んでいるのか分かりません。それは次の日曜日の日、または次の宝くじチケットの番号かもしれません。 @arrは全く何も言う。)

実際にはブロック間の2つだけ改行文字がおそらくあるので、@arr$arr[0]

はあなたのコードの残りの部分は

のように見える単一の要素で $contentの全体が含まれています
my $len = length @arr; 

$len = $len/2; 

my $b = round($len) - 1; 

@arrの要素の数に$lenが設定されていると思います。あなたはmy $len = @arrと書いてください。何が書かれていることは、

全く別の何かを、あなたがそれラウンドに設定されたものは何でも$len半減し、ソートをマージような何かをすることを目指しているようこれが探しているもの

を減算したいんそして、あなたは私が正しい場合は、$lenは今、整数または整数プラス0.5、およびPOSIX::roundはシンプルint

よりも良いではありません呼び出すのいずれかになります半分に配列を分割し、再帰的に

それらを処理する必要があります

私は今や多くの推測をしており、続けるのは無意味です。あなたの全体的な目的を説明するならば、私たちはより良い

0

はいあなたを助けることができるようになりますが、あなたは間違ってlength機能を使用しています。

length @arr予想通り、配列@arrのサイズが返されない場合は、サイズが@arrになります。配列の長さを取得するには、scalar @arrを使用するか、「スカラーコンテキストで@arrを評価」したい:あなたは正しくsplitを使用している場合

$len = scalar @arr; 
$len = @arr;   # assignment to scalar is "scalar context" 

また、はっきりしません。

@arr = split /\\n\\n/, $content 

リテラル文字列\n\nに分割されます。あなたは連続した改行があるどこ$contentを分割したい場合は、あなただけの

@arr = split /\n\n/, $content 
+0

** ikegami **はすでに "my $ len = length @arr;"が間違っていると言っています(配列のサイズの桁数に '$ len'を設定しています)。' my $ len = @arr; '" * [上記のコメント](http://stackoverflow.com/questions/39397702/am-i-using-the-round-function-correctly/39398672#comment66121794_39397702)。どのような場合でも、私はこれがどのように問題の解決策であるかわかりません。 – Borodin

関連する問題