下記の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ランキング
-
複数種類の括弧でくくられてな...
-
消費税の計算で 税込価格から...
-
HTTP::Request::Common qw(POST...
-
perlでuse utf8でsjisのファイ...
-
VBAで巨大なファイルの途中から...
-
ハッシュにファイルハンドル
-
コマンド「dir」の結果を、テキ...
-
ファイル全てを .xlsm に変更し...
-
デルファイ TabControl タブの...
-
ファイルの内容をスカラー変数...
-
エラーログ「\\x8ew\\x92\\xe8...
-
エクセルVBA コードが同じでも...
-
Perlの初心者です。2重ループ...
-
JSP URLに表示される拡張子 .jsp
-
csvファイル改行コードの置換に...
-
openした後、closeしないでプロ...
-
C言語でファイル名を取得
-
awkスクリプトでダブルクォーテ...
-
統計ソフトRでデータ取り込みが...
-
ExcelをCSV書き出す場合のシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル出力をUTF8Nではなくて...
-
Perl cgiの文字化けを直したい ...
-
perlをwindows環境でshift-jis...
-
[Perl]Shift-JISのXMLを解析する場
-
Perl utf8上でshiftjisをデコード
-
(Perl)UTF-8で別ファイルに書き...
-
utf8使用時のフォーム入力文字...
-
Data::Dumper;でダンプ後表示し...
-
perlのLWP::Simpleでgrepの値が...
-
perlのmysqlで文字化けをする、...
-
does not map to shiftjis は解...
-
vimでのutf8の取扱について
-
HTTP::Request::Common qw(POST...
-
文字を一文字ずつ区切りたい
-
Perl UTF8で出力
-
じゃらんの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を表示します。
何処が違うのだろうか。