下記のperlでgrepの戻り値がおかしい。
use Encode;
use utf8;
use open IO => ":encoding(utf8)";
binmode STDOUT,':encoding(cp932)';
binmode STDERR,':encoding(cp932)';
use LWP::Simple;
$content=get("http://uwakich.com/archives/49502116.html");
@list1=grep /\n/,$content;
@list2=grep{$list1[$_] =~ /html/} 0 .. $#list1;
print @list2;
grepの値は、添字を返す。結果は0を返す。実際は、最低でも2つは有る
はずだが。一つも無いと言うのは、どうしてだろうか。
これは、例えば一旦$contentをファイルに落としてからやると、今度は
きちんとgrepは添字を返して来る。
何が違うのだろうか。済みません。誤りを指摘願います。
No.1ベストアンサー
- 回答日時:
ちゃんと「添字 0 」という「正しい結果」が返ってきてますよ。
@list1=grep /\n/,$content;
は、「要素が $content だけのリスト」が引数となります。つまり
my @contents
$contents[0] = $content ;
@list1=grep /\n/, @contents;
と同等です。
grepは /\n/ が真となる要素のリストをかえします。したがって
@;ist1 = @contents ;
すなわち
$;ist1[0] = $content ;
と同じ状態になります。
その該当する添字の返えせば
@list2 = ( 0 )
になるのが正しい動作です。
> 例えば一旦$contentをファイルに落としてからやると
こちらは、
@lines = <FP> ;
みたいな感じで、 ファイルの1行 = リストの1要素 として読み込んでいるのではないですか?
「行分割されたリスト」
と、
「全行を連結した文字列」
とで、結果が違ってもなんの不思議もありません。
@list1=grep /\n/,$content;
はsplitでしょうね。
http://perldoc.jp/func/grep
http://perldoc.jp/func/split
有難う御座います。
てっきり、grepをsplitの積りで使っていました。
解決です。vim,perl,enc,fencとかで、ごちゃごちゃして
整理が出来ていませんでした。
有難う御座います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- UNIX・Linux bashでブランク(空白)を検索文字列として指定する方法 1 2022/04/13 22:29
- WordPress(ワードプレス) ワードプレスのエラー ログイン画面が表示できない 1 2022/11/05 09:51
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- UNIX・Linux bashスクリプトのgrepで3XXの検索の仕方について 2 2022/09/06 21:35
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
ファイル出力をUTF8Nではなくて...
-
HTTP::Request::Common qw(POST...
-
fopenでディレクトリ内の全ファ...
-
バッチファイルの作り方(CSV→...
-
ReadLineでの読み出し行を指定する
-
awkスクリプトでダブルクォーテ...
-
教えて!perlから.exeファイル...
-
MySQLに画像を格納してperlで取...
-
パスから最後のディレクトリだ...
-
ExcelをCSV書き出す場合のシー...
-
DOSコマンドで、標準出力を出力...
-
dos変数の%~dp0は powershellで...
-
perlを用いた特定文字列間の抽...
-
複数ファイルの読み込みについて
-
perlでの三次元配列の作り方
-
Perlの変数に文字数制限(容量...
-
改行コードが勝手に
-
VBA テキストファイルを読み取...
-
VBAで巨大なファイルの途中から...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル出力をUTF8Nではなくて...
-
Perl cgiの文字化けを直したい ...
-
perlをwindows環境でshift-jis...
-
[Perl]Shift-JISのXMLを解析する場
-
Perl utf8上でshiftjisをデコード
-
utf8使用時のフォーム入力文字...
-
Data::Dumper;でダンプ後表示し...
-
(Perl)UTF-8で別ファイルに書き...
-
perlのmysqlで文字化けをする、...
-
Perl UTF8で出力
-
perlのLWP::Simpleでgrepの値が...
-
HTTP::Request::Common qw(POST...
-
vimでのutf8の取扱について
-
文字を一文字ずつ区切りたい
-
does not map to shiftjis は解...
-
じゃらんのAPIでRESTで取得した...
-
perlでuse utf8でsjisのファイ...
-
VBAでCSVファイルを途中行まで...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
おすすめ情報
先程は失礼しました。実は、ファイルに落としてからやったのですが。
矢張り出来ませんでした。ファイルに落としてからやると全ての
htmlのソースを出力してから最後に0を出力します。
意味が分かりません。この時のふるまいをすみませんが。説明願います。
よろしくお願いします。
下記のperlは正常に出力をするのですが。
@in=( "htm", "html", "anta");
@list=grep{$in[$_] =~ /html/} 0 .. $#in;
print join("\t",@list);
このブ場合は正しく1を表示します。
何処が違うのだろうか。