ocehb: (Default)
[personal profile] ocehb
взята отсюда.

На сервере имеется файл /tmp/money. Каждая строка файла – последовательность символов без пробелов, состоящая из наименования валюты и номинала. Например, rubl100, bucks20, frank1.

Нужно дописать perl-скрипт, чтобы он вывел все строки из файла в порядке возрастания стоимости соответствующей банкноты.


#!/usr/bin/perl -w

use strict;

# Курсы валют (предполагается, что все курсы,
#  которые могут встретиться в файле, в этом хэше есть)
my $roe = {
  frunk => 1,
  tugrik => 100,
  bobrik => 10,
};


мое решение:


my $re = sprintf "(%s)",join "|",keys %$roe;
print join "\n",map { $_->[0] } sort { $a->[1] <=> $b->[1] }
  map { chomp; m#^$re(\d+)#o && [ $_,$2/$roe->{$1} ] } <>;


использование:


zsh# perl -le 'my $roe = { frunk => 1, tugrik => 100, bobrik => 10 }; 
  my $re = sprintf "(%s)",join "|",keys %$roe;
  print join "\n",map { $_->[0] } sort { $a->[1] <=> $b->[1] }
    map { chomp; m#$re(\d+)#o && [ $_,$2/$roe->{$1} ] } <>' \
  =( print -l frunk1 bobrik1 tugrik1 tugrik100 bobrik20 bobrik5 )      
tugrik1
bobrik1
bobrik5
frunk1
tugrik100
bobrik20
zsh#

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 7th, 2026 09:38 am
Powered by Dreamwidth Studios