
問題を突き止めるため、コードをここまで小さくしましたが、まだエラーが出ます・・・
use strict;
$_ = [0, 1];
grep($_ == $$_[0], 0, 1)
このコードはgrepの中で$_をデリファレンスしているだけです。
これを実行すると、
Can't use string ("0") as an ARRAY ref while "strict refs" in use
というエラーになってしまいます。
ううむ、どこかでシンボリックリファレンスを使っているのでしょうか
No.1ベストアンサー
- 回答日時:
同じ数字がたくさん出てきてややこしいので説明用に
use strict;
$_ = [1, 2];
grep($_ == $$_[0], 3, 4)
と変更します。エラー原因に関係する変更ではありません。
そもそも$_=[1,2]のままでも $_ == $$_[0] は
$_がリファレンス、$$_[0]はデリファレンスしたリストの先頭要素"1"
と比較すること自体が論理的に変です。言語仕様的にエラーにはなってないですが。
それが、grepで $_が対象リストの各要素に置き換わって、最初は$_="3" となり、
そのリファレンスではない"3"をデリファレンスしようとしたので
Can't use string ("3") as an ARRAY ref while "strict refs" in use
エラーになっています。
早速のご回答ありがとうございました!
エラーの原因が分かりました。
これは私の思いこみによるエラーでした。
私はgrepの外側で設定した$_をgrepの中で参照しようとしましたが、
grep中では$_がgrep専用に局所化されてしまい、あらかじめセットした外側の$_は参照できないのですね。
grep($_ == $$_[0], 3, 4)
私の思いこみでは、この式の最初の$_はgrepがリストを次々に代入するために使う変数で、
次の$$_[0]はgrepの外側で設定した無名配列を参照しようとしているものです。
しかし、実際にはどちらもgrep用の$_なのだと気付かずに、悩んでいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- Visual Basic(VBA) IBM Notes9のメールをExcelVBAにて送信するコードについての質問です。 以下のコードを 3 2023/06/21 17:58
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- JavaScript 初心者です。gulpでコンパイルができないので教えてください! 1 2023/05/17 17:07
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- WordPress(ワードプレス) ワードプレスのエラー ログイン画面が表示できない 1 2022/11/05 09:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お助けください!VBAのファイル...
-
マクロで"#N/A"のエラー行を削...
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
E2206のエラーについて
-
ACCESSで値を代入できないとは?
-
On ErrorでエラーNoが0
-
続・PerlのメッセージBOXについて
-
VBAでfunctionを利用しようとし...
-
VBA データ(特定値)のある最...
-
【VB.NET】 パワポ操作を非表示で
-
PerlでMAPIについて
-
日付書式のString型からData型...
-
String""から型'Double'への変...
-
エクセルVBAで埋め込みグラフ(C...
-
フランスの生年月日(jj/mm/aaaa)
-
VBA エラーが出てしまいます。...
-
マクロOn Error GoTo ErrLabel...
-
現在、QueryTableが設定されて...
-
【VBAエラー】Nextに対するFor...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロOn Error GoTo ErrLabel...
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
【VBAエラー】Nextに対するFor...
-
ACCESSで値を代入できないとは?
-
【Access】Excelインポート時に...
-
VBでSQL文のUPDATE構文を使った...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
実行時エラー'-2147467259(8000...
おすすめ情報