質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

2193閲覧

perlワンライナーをできるだけ短くしたい

xu__huang

総合スコア11

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2015/12/22 03:45

編集2015/12/22 03:50

freeコマンドの結果を元に、以下の内容を出力するperlワンライナーがあります。
このワンライナーを1文字でも多く少なくしたいです。
邪悪なコードになっても構わないので、ご回答いただくと幸いです。
なお、perlはv5.8.8です。

$ free|perl -a0ne'foreach(@F[7,15,16]){$_=($_>1024)?sprintf"%.1fG ",$_/=1024:"${_}M ";print}print"\n"' 3.4G 2.8G 652M

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

arguisさんのを元にさらに削ります。

  • printが最後に1回だけになったので、-pオプションを使えばprintの代わりに$_=で済む(2文字削れる)
  • "M"はお行儀が悪いですがbarewordにしてしまえばMだけでいい(2文字削れる)

shell

1free|perl -a0pe'@a=map{$_>1024?sprintf"%.1fG",$_/1024:$_.M}@F[7,15,16];$_="@a\n"'

投稿2015/12/24 05:40

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/12/24 06:16

これはすごい! -pオプションでできると思ってやってみたものの上手くいかなかったのですが、そうすれば良かったんですね。 strictでなくて良いのだから、barewordで行けば、というのは思いつきませんでした。 というか、barewordを文字列に使えることを知りませんでした。 勉強になりました。ありがとうございます。
xu__huang

2015/12/24 23:39

自分なりに結構短くしたつもりでしたが、まだまだ削れたんですね。 とても参考になりました。ありがとうございました!
guest

0

100文字⇒85文字になりました。

lang

1free|perl -a0ne'@a=map{$_>1024?sprintf"%.1fG",$_/1024:$_."M"}@F[7,15,16];print"@a\n"'

ポイントは、以下の通り。

  • foreachでなく、mapで配列を変換して変数に入れておく(後述のprintで使用)
  • .演算子でつなげて{}を省く
  • $_/=1024のイコールは不要
  • printを1回にする print "@a"にすれば区切りのスペースも省ける

投稿2015/12/22 05:03

編集2015/12/23 01:32
argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xu__huang

2015/12/24 23:39

迅速にご回答いただき、誠にありがとうございました。crhgさんの回答のベー スにもなっていることから、心情的にはベストアンサーにしたいのですが、今 回はcrhgさんをベストアンサーとさせていただきました。何卒ご容赦ください。
argius

2015/12/25 01:05

crhgさんは私のをベースにしなくてもきっとこの結果に辿り着いていたと思いますし、 ご質問の性質上、最短なのがベストアンサーになるのが筋でしょう。 なので、お気になさらず。 pオプションは自力で辿り着きたかったところですが、だいぶPerlを忘れているみたいで、ギブアップしてしまいました。残念。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問