ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Perlってどうよ?コミュのワンライナー系の質問トピ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
って勝手に作っちゃいましたw

で、一発目。

Solaris8にrevコマンドが無いので、rev相当の動きを実現するのにスクリプト組むしかないのか?と悩んでいたら、
ワンライナーperlでreverse関数を使ってみては?とのヒントを頂き、以下のようにしてみました。

versionは、
# perl -v
This is perl, version 5.005_03 built for sun4-solaris

です。

最初、『$』での文字列参照がうまくいかず苦労しましたが、『$』での文字列参照を『'』の外に出して
やることで、ひとまず『全て英字』についてはうまくいきました。
# STR=qwerty
# perl -le '$rev=reverse('$STR');print $rev'
ytrewq


ところが『先頭が数字で始まって途中で英字が混じる文字列』だと“syntax error”になってしまうの
です。
# STR=1q2
# perl -le '$rev=reverse('$STR');print $rev'
Bareword found where operator expected at -e line 1, near "1q2"
(Missing operator before q2?)
syntax error at -e line 1, near "1q2"
Execution of -e aborted due to compilation errors.


『全て数字』や『先頭が英字で始まって途中で数字が混じる文字列』だと問題ありません。
# STR=q1w
# perl -le '$rev=reverse('$STR');print $rev'
w1q


『記号で始まって数字が混じり記号で終わる』についても“syntax error”になりました。
# STR=\\123\\
# echo $STR
\123\
# perl -le '$rev=reverse('$STR');print $rev'
Backslash found where operator expected at -e line 1, near "123\"
(Missing operator before \?)
syntax error at -e line 1, near "123\"
Execution of -e aborted due to compilation errors.

Solaris8固有の現象かどうか確かめようと自宅のCentOS4.4(Finale) perl5.8.5で試したところ、同様に、
STR=1w2
で“syntax error”になりました。

また、
STR=0b0
だと“syntax error”にはならず、但し間違った結果の
0
が返りますが、
STR=0B0
だとやはり“syntax error”です。

STR=\\abc\\
STR=\\123\\
も“syntax error”です。


なんでなんでしょうか?
−−−−−−−−−−

以下トピと一部クロスポストしてます。
http://mixi.jp/view_bbs.pl?id=242668&comment_count=421&comm_id=435

コメント(1)

$ perl -le '$rev=reverse("'$STR'");print $rev'
か,
$ perl -e 'print reverse($ARGV[0])' "$STR"
かなぁ?

パイプだと,こんなんか.
$ echo "$STR" | perl -ple '$_=reverse($_)'

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Perlってどうよ? 更新情報

Perlってどうよ?のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング