Groovy Vs Perl

M
Groovy vs. Perl: можно скриптовать.


    Почему захотелось groovy?


    www.ivis.ru он же www.eastview.com -
    это коллектор периодических изданий.


    Всё сделано на Java, и только скрипты
    обработки данных из газет, журналов
    и новостных лент — на Perl.
                        
Захотелось моноплатформенности.
Groovy понравился, но испугались,
потому что:
1) очень много скриптов
переписывать с Perl-а;
2) год назад Groovy казался слишком
молодой технологией.
Но за год Groovy шагнул с версии 1.5.6
до 1.6.3. А в нём лучше regexp-ы.
                    
Groovy — это
       написанный на Java
       объектно-ориентированный
       скриптовый язык,
       компилируемый в байт-код,
       исполняемый на JVM.


    На Groovy написан Grails -
    RoR-подобный web-фреймворк.
                        
Достоинства Groovy.
Тесная интеграция с Java:
    - прямо в Groovy скриптах можно
писать Java-код, потому что GDK -
это расширение JDK;
- из java-кода можновызывать
код groovy;
- из groovy-кода можно вызывать
код скомпилированных классов java.
                      
Существует 4 способа запускать
groovy, если не счиатать
web-приложения:
а). сохранить скрипт в файле и
запустить из командной строки
>./script.groovy
привет
>cat script groovy
#!/usr/bin/env groovy
println 'привет'
                    
б) скомпилировать в java-класс
и запускать с помощью java
> groovyc script.groovy
                   
> ls *class
script.class
> java ­cp $GROOVY_HOME/embeddable/groovy­all­1.6.2.jar:. script
привет




                                
в) выполнять код groovy с помощью
    groovy shell
    >groovysh
    Groovy Shell (1.6.2, JVM: 1.6.0_07)
    Type 'help' or 'h' for help.
    -------------------------------------
    groovy:000> class ФИ {
    groovy:001> def Фамилия
    groovy:002> def Имя
    groovy:003> def какТебяЗовут(){ quot;Меня зовут ${Имя} ${Фамилия}quot; }
    groovy:004> }
    ===> true
    groovy:000> Дизайнер = new ФИ (Фамилия: quot;Ивановquot;, Имя: quot;Иванquot; )
    ===> ФИ@652110
    groovy:000> Дизайнер.какТебяЗовут()
    ===> Меня зовут Иван Иванов
    groovy:000>


                                     
д) выпонять код в groovyConsole




                     
е) делать всё, что надо, прямо из
командной строки, как в Perl:
inline scripting.
е.1) ключ -e - исполнение кода,
записанного в командной строке:
  > groovy -e quot;println 'Hi, YAPC'quot;
  Hi, YAPC
  > groovy -e quot;println 'Hi, ' + args[0]quot; YAPC
  Hi, YAPC
  > groovy -e quot;println 'Hi, ' + args.join('::') + ' 2009'quot; 
  > YAPC Russia
  Hi, YAPC::Russia 2009           
е.2) обработка каждой строки из
входного потока:
переменная line и ключ -n (вместе с -e)
> cat test2.txt
строка в нижнем регистре

> cat test2.txt | groovy -n -e 'println line.toUpperCase()'
СТРОКА В НИЖНЕМ РЕГИСТРЕ

  > cat test2.txt | groovy -n -e 
  > 'k=0; line.split(/s+/).each{ println quot;${++k} quot; + it; }'
  1 строка
  2в
  3 нижнем
  4 регистре                     
е.3) обработка каждой строки из STDIN
(в переменной line лежит очередная
строка ) и печать обработанных
строк в STDOUT: ключ -p (вместе с -e).
> cat test3.txt
Иваненко
Петренко
Сидоренко

 > cat test3.txt | groovy -p -e 
 '(line =~ /енкоb/).replaceAll(quot;iвquot;)'
 Иванiв
 Петрiв
 Сидорiв                         
е.4) обработка файла «in place'
с созданием резервной копии (.bak)
исходного файла: ключ -i (-p -e).
  > cat test3.txt
  Иваненко
  Петренко
  Сидоренко
  > groovy -p -i .bak -e 
  '(line =~ /енкоb/).replaceAll(quot;iвquot;)' test3.txt
  > cat test3.txt
  Иванiв
  Петрiв
  Сидорiв
  > ls test3*
  test3.txt test3.txt.bak       
Структуры даных (Collections)
   Массивы (Lists) — на основе ArrayList
   Хэши (Maps) — на основе HashMap

Для массивов определено много
разных методов: grep, sort, pop, push,
remove, intersect, disjoint, removeAll,
findAll, isCase, max, min, every, any, join, ...

                        
Массивы
myList = ['a', 'bc', 3]
assert myList.size() == 3
assert myList[1] == 'bc'

assert myList.reverse() == [3, 'bc', 'a']

// из диапазона делаем массив
diap = (1..10).toList()
assert diap[4] == 5

myList.push('u'); myList.push('v'); myList.push('w');
assert myList == ['a', 'bc', 3, 'u','v','w']

assert myList[1..3] == [ 'bc', 3, 'u' ]
assert myList[2, 4] == [3, 'v']

top = myList.pop()
                                 
assert top == 'w'
Массивы (продолжение)
yapc = []

yapc += 'Шитов' // добавляем элемент
assert yapc == ['Шитов']

yapc += ['Капранов', 'Закиров']
assert yapc == ['Шитов', 'Капранов', 'Закиров']

yapc << 'Серёжкин' << 'Mons'
assert yapc == ['Шитов', 'Капранов',
                'Закиров', 'Серёжкин', 'Mons']

assert yapc - ['Капранов', 'Закиров'] ==
                            ['Шитов', 'Серёжкин', 'Mons']

assert yapc*2 == ['Шитов', 'Капранов', 'Закиров',
'Серёжкин', 'Mons',
                              
'Шитов', 'Капранов', 'Закиров', 'Серёжкин', 'Mons']
Массивы (продолжение)
то, что в perl: map
то в groovy: each
> perl -e 'print quot;$_nquot; for map { $_ + 7 } (1,2,3);'
8
9
10

> groovy -e '[1,2,3].each{ println it + 7 }'
8
9
10


                                
Массивы (продолжение)
то, что в perl: split, то и в groovy: split
    > perl -e 'print quot;$_nquot; for split(/, / ,quot;Вася, Петяquot; );'
    Вася
    Петя

    > groovy -e quot;s ='Вася, Петя'; s.split(', ').each{ println it }quot;
    Вася
    Петя




                                     
Массивы (продолжение)
что в perl grep, то и в groovy grep
> perl -e 'print quot;$_nquot; for grep { /шка$/ } qw(шишка ёлка);'
шишка

> groovy -e quot;['шишка', 'ёлка'].grep(~/.*шка$/).each{println it}quot;
шишка


В groovy имеется unique
> groovy -e '[1,1,1,2,2].unique().each{println it}'
1
2


                                 
perl sort и groovy sort похожи
> perl -e 'print quot;$_nquot; for sort {$a <=> $b} (111,10,11,1,2,5);'
1
2
5
10
11
111

> groovy -e '[111,10,11,1,2,5].sort{x,y -> x<=>y}.each{println it}'
1
2
5
10
11
111




                                      
Сортировка массива замыканием
    > cat cards_sorter.groovy
    def cards = ['ace', 'queen', 'jack', 'joker', 'king']

    def cardWeight = ['jack': 10, 'queen':20, 'king':30,
                      'ace':40, 'joker':50 ]

    def compareCards =
       { x, y ->

                  if( cardWeight[x] < cardWeight[y] )
                  return -1
                  else if (cardWeight[x] > cardWeight[y])
                  return 1
                  else
                  return 0
        }
                                    
    cards.sort{ x,y -> compareCards(x, y) }.each{ println it }
Результат сортировки массива
    > groovy cards_sorter.groovy
    jack
    queen
    king
    ace
    joker




                               
Хэши (maps)
def myMap = [x:1, y:2, z:3]
def herMap = [z:3, x:1, y: 2]
def hisMap = [э:3, ю:2, я:3]

assert myMap == herMap
hisMap.putAll(herMap) //добавление одного хэша в другой

assert   hisMap == [э:3, ю:2, я:3, z:3, x:1, y: 2]
assert   hisMap.isEmpty() == false
assert   hisMap.size() == 6
assert   hisMap.containsKey('ю') == true
assert   hisMap.containsValue(1) == true

def toSet(list) { new java.util.HashSet(list) }

assert herMap.keySet() == toSet(['x','y','z'])
assert toSet( herMap.values()  ) == toSet( [1, 2, 3] )
 
Хэши (maps) - продолжение
def myMap = [x:1, y:2, z:3]

assert myMap.any {entry -> entry.value > 2}
assert myMap.every {entry -> entry.key > 'a'}

def mySubMap = myMap.subMap( [ 'x', 'y' ] )
assert mySubMap == [x:1, y:2 ]

def greater_then_1 = myMap.findAll{ elem -> elem.value > 1 }
assert greater_then_1 == [ 'y':2, 'z':3 ]

def f = myMap.find {elem -> elem.value == 1}
assert f.key == 'x'
assert f.value == 1

myMap.remove('x')
assert myMap == [y:2, z:3]
                               
Регулярные выражения в groovy
assert quot;32.99quot; == 'Total Amount: $32.99'.find(/(d+).(d{2})/)

// захват групп с помощью замыкания
def roundedAmount(value) {

  value.find(/(d+).(d{2})/)
 {
      fullMatch, dollars, cents ->
      return dollars.toInteger()
      + ( cents.toInteger() > 50 ? 1 : 0 )
  }

                             }

assert quot;33quot; == roundedAmount('Total Amount: $32.99')
assert quot;44quot; == roundedAmount('I paid $44.28 for it')
                            
Регулярные выражения в groovy
(продолжение)
// чтобы найти все совпадения - findAll
def string = quot;Moe Fine, Howard Fine, and Larry Finequot;
def stooges = string.findAll(/(w+) Fine/)

assert stooges == [quot;Moe Finequot;, quot;Howard Finequot;, quot;Larry Finequot;]

// чтобы захватывать группы — используют запыкания
def string = quot;Moe Fine, Howard Fine, and Larry Finequot;
def firstNames = string.findAll(/(w+) Fine/)
                 {
                 match, firstName -> firstName
                 }

assert firstNames == [quot;Moequot;,  quot;Howardquot;, quot;Larryquot;]
 
Регулярные выражения в groovy
(продолжение)
  foo = 42
  str = '''blah
          #foo#
          blah'''
  re = '''(?xm)       # to enable whitespace and comments
             # # a pound sign
             (w+) # the variable name
             # # another pound sign
      '''
  finder = str =~ re
  found = finder[0]
  out = str.replaceAll(found[0], evaluate(found[1]).toString())
  assert out == '''blah
 
          42                      
          blah'''
Что читать про groovy
            'Groovy in Action', Manning, 2007
            Dierk Koenig, Andrew Glover,
            Paul King, Guillaume Laforge, Jon Skeet



            'Groovy Recipes: Greasing the Wheels of Java'
            Pragmatic Bookshelf, 2008
            Scott Davis




                            
* http://groovy.codehaus.org/ - домашняя страница groovy

* http://voituk.kiev.ua - блог Вадима Войтюка
  «Записки искателей»

* http://pleac.sourceforge.net/pleac_groovy/index.html
  PLEAC - Programming Language Examples Alike Cookbook

* http://blog.alno.name/2008/06/using-groovy/ -
  блог Алексея Носкова

* циклы статей Эндрю Гловера на ibm.com, например:
- 'Практически Groovy:
  Разметка с помощью Groovy Builders'
  http://www.ibm.com/developerworks/ru/library/j-pg04125/

- Практически Groovy : MOP и мини-языки
  http://www.ibm.com/developerworks/ru/library/j-pg09205/
                               
* Про регулярные выражения — blog of Ted Nailed

    'Groovy: Don’t Fear the RegExp'
    http://naleid.com/blog/2008/05/19/dont-fear-the-regexp/

  'Groovy 1.6.1 released with new find and findAll
  regexp methods on String'
  http://naleid.com/blog/2009/04/07/groovy-161-released-
with-new-find-and-findall-regexp-methods-on-string/




                                
1 of 29

Recommended

20070329 Phpconf2007 Training by
20070329 Phpconf2007 Training20070329 Phpconf2007 Training
20070329 Phpconf2007 TrainingNikolay Samokhvalov
645 views47 slides
20071113 Msu Vasenin Seminar by
20071113 Msu Vasenin Seminar20071113 Msu Vasenin Seminar
20071113 Msu Vasenin SeminarNikolay Samokhvalov
554 views47 slides
Hackday Ml by
Hackday MlHackday Ml
Hackday MlNLPseminar
822 views33 slides
Grails紹介 by
Grails紹介Grails紹介
Grails紹介Uehara Junji
1.3K views38 slides
XS Japan 2008 Xen Mgmt Japanese by
XS Japan 2008 Xen Mgmt JapaneseXS Japan 2008 Xen Mgmt Japanese
XS Japan 2008 Xen Mgmt JapaneseThe Linux Foundation
1.3K views10 slides
Boo Programming Language by
Boo Programming LanguageBoo Programming Language
Boo Programming LanguageVitaly Baum
297 views31 slides

More Related Content

What's hot

dRuby by
dRubydRuby
dRubytoyoshi
686 views11 slides
Perfect wedding and bridal by
Perfect wedding and bridalPerfect wedding and bridal
Perfect wedding and bridalMD. Monzurul Karim Shanchay
546 views125 slides
Postgre Sql 8 4 by
Postgre Sql 8 4Postgre Sql 8 4
Postgre Sql 8 4Liudmila Li
614 views25 slides
資料庫期末Project Proposal by
資料庫期末Project Proposal資料庫期末Project Proposal
資料庫期末Project ProposalFrank Chang
5.1K views20 slides
Doublons de compétences : le mal français by
Doublons de compétences : le mal françaisDoublons de compétences : le mal français
Doublons de compétences : le mal françaisFondation iFRAP
5.8K views16 slides
技術トレンディセミナー フレームワークとしてのTrac by
技術トレンディセミナー フレームワークとしてのTrac技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTracterada
2.4K views16 slides

What's hot(12)

dRuby by toyoshi
dRubydRuby
dRuby
toyoshi686 views
資料庫期末Project Proposal by Frank Chang
資料庫期末Project Proposal資料庫期末Project Proposal
資料庫期末Project Proposal
Frank Chang5.1K views
Doublons de compétences : le mal français by Fondation iFRAP
Doublons de compétences : le mal françaisDoublons de compétences : le mal français
Doublons de compétences : le mal français
Fondation iFRAP5.8K views
技術トレンディセミナー フレームワークとしてのTrac by terada
技術トレンディセミナー フレームワークとしてのTrac技術トレンディセミナー フレームワークとしてのTrac
技術トレンディセミナー フレームワークとしてのTrac
terada2.4K views
Aghorastra mantra sadhna vidhi in hindi & sanskrit by Sumit Girdharwal
Aghorastra mantra sadhna vidhi in hindi & sanskritAghorastra mantra sadhna vidhi in hindi & sanskrit
Aghorastra mantra sadhna vidhi in hindi & sanskrit
Sumit Girdharwal2.5K views
企业级搜索引擎Solr交流 by chuan liang
企业级搜索引擎Solr交流企业级搜索引擎Solr交流
企业级搜索引擎Solr交流
chuan liang1.3K views
Friv 4 friv4 Juegos Friv Games Online by Nguyễn Học
Friv 4   friv4  Juegos Friv Games OnlineFriv 4   friv4  Juegos Friv Games Online
Friv 4 friv4 Juegos Friv Games Online
Nguyễn Học4.4K views

Viewers also liked

Iee830 by
Iee830Iee830
Iee830yjol1360
2.6K views9 slides
K+p seminar Telia by
K+p seminar TeliaK+p seminar Telia
K+p seminar TeliaNiels Kaldahl
860 views35 slides
Take a Stroll in the Bazaar by
Take a Stroll in the BazaarTake a Stroll in the Bazaar
Take a Stroll in the BazaarMyles Braithwaite
1.3K views41 slides
Talent Pipeline Datasheet by
Talent Pipeline DatasheetTalent Pipeline Datasheet
Talent Pipeline DatasheetNick Goldstein
453 views2 slides
Summit2012 proposal-sarah maddox by
Summit2012 proposal-sarah maddoxSummit2012 proposal-sarah maddox
Summit2012 proposal-sarah maddoxSarah Maddox
734 views15 slides
Koning wilde niet dat Roger Lallemand minister van Staat werd by
Koning wilde niet dat Roger Lallemand minister van Staat werdKoning wilde niet dat Roger Lallemand minister van Staat werd
Koning wilde niet dat Roger Lallemand minister van Staat werdThierry Debels
460 views2 slides

Viewers also liked(18)

Iee830 by yjol1360
Iee830Iee830
Iee830
yjol13602.6K views
Summit2012 proposal-sarah maddox by Sarah Maddox
Summit2012 proposal-sarah maddoxSummit2012 proposal-sarah maddox
Summit2012 proposal-sarah maddox
Sarah Maddox734 views
Koning wilde niet dat Roger Lallemand minister van Staat werd by Thierry Debels
Koning wilde niet dat Roger Lallemand minister van Staat werdKoning wilde niet dat Roger Lallemand minister van Staat werd
Koning wilde niet dat Roger Lallemand minister van Staat werd
Thierry Debels460 views
LIASA HELIG Publishing Tips for Librarians by HELIGLIASA
LIASA HELIG Publishing Tips for LibrariansLIASA HELIG Publishing Tips for Librarians
LIASA HELIG Publishing Tips for Librarians
HELIGLIASA323 views
What Did the HR Tech Salesperson Say? SHRM Annual 2014 Presentation by H3 HR Advisors, Inc.
What Did the HR Tech Salesperson Say? SHRM Annual 2014 PresentationWhat Did the HR Tech Salesperson Say? SHRM Annual 2014 Presentation
What Did the HR Tech Salesperson Say? SHRM Annual 2014 Presentation
Trust Stranger or Boss by O.C. Tanner
Trust Stranger or BossTrust Stranger or Boss
Trust Stranger or Boss
O.C. Tanner3.5K views
A Peek into Doner's Social Practice by Marcus Collins
A Peek into Doner's Social PracticeA Peek into Doner's Social Practice
A Peek into Doner's Social Practice
Marcus Collins2.9K views
タイ人オタクが艦これ聖地山を巡った話 第2話 神戸 摩耶 by Matumit Sombunjaroen
タイ人オタクが艦これ聖地山を巡った話 第2話 神戸 摩耶タイ人オタクが艦これ聖地山を巡った話 第2話 神戸 摩耶
タイ人オタクが艦これ聖地山を巡った話 第2話 神戸 摩耶
(Sadn1013 h) kump 22 by sadn1013
(Sadn1013 h) kump 22(Sadn1013 h) kump 22
(Sadn1013 h) kump 22
sadn1013668 views
Performance Recognition by O.C. Tanner
Performance RecognitionPerformance Recognition
Performance Recognition
O.C. Tanner3.8K views

Similar to Groovy Vs Perl

за Ruby by
за Rubyза Ruby
за RubyStefan Kanev
395 views103 slides
Упаковка и развертывание программ на perl под debian‎ by
Упаковка и развертывание программ на perl под debian‎Упаковка и развертывание программ на perl под debian‎
Упаковка и развертывание программ на perl под debian‎mayperl
1K views37 slides
тупицын Ec2 Rootconf2009 by
тупицын Ec2 Rootconf2009тупицын Ec2 Rootconf2009
тупицын Ec2 Rootconf2009Liudmila Li
376 views42 slides
20080424 Cdb2008 Postgresql News Bartunov by
20080424 Cdb2008 Postgresql News Bartunov20080424 Cdb2008 Postgresql News Bartunov
20080424 Cdb2008 Postgresql News BartunovNikolay Samokhvalov
354 views25 slides
とちぎRuby会議01(原) by
とちぎRuby会議01(原)とちぎRuby会議01(原)
とちぎRuby会議01(原)Shin-ichiro HARA
3.2K views105 slides
Nop2 by
Nop2Nop2
Nop2guestea6d59
14.9K views47 slides

Similar to Groovy Vs Perl(20)

Упаковка и развертывание программ на perl под debian‎ by mayperl
Упаковка и развертывание программ на perl под debian‎Упаковка и развертывание программ на perl под debian‎
Упаковка и развертывание программ на perl под debian‎
mayperl1K views
тупицын Ec2 Rootconf2009 by Liudmila Li
тупицын Ec2 Rootconf2009тупицын Ec2 Rootconf2009
тупицын Ec2 Rootconf2009
Liudmila Li376 views
P2 P Mobile Advertising And Targeting by guest258f78a
P2 P Mobile Advertising And TargetingP2 P Mobile Advertising And Targeting
P2 P Mobile Advertising And Targeting
guest258f78a182 views
Как сделать контрибут в Ruby on Rails by Yaroslav Markin
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
Yaroslav Markin891 views
Perl в хэке и хэки в Perl by mayperl
Perl в хэке и хэки в PerlPerl в хэке и хэки в Perl
Perl в хэке и хэки в Perl
mayperl1.1K views
Основы работы с Memcached by railsclub
Основы работы с MemcachedОсновы работы с Memcached
Основы работы с Memcached
railsclub532 views
Intro To RDBMS And SQL Server 2005 - Svetlin Nakov by Svetlin Nakov
Intro To RDBMS And SQL Server 2005 - Svetlin NakovIntro To RDBMS And SQL Server 2005 - Svetlin Nakov
Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
Svetlin Nakov615 views
Защо Ruby on Rails by Stefan Kanev
Защо Ruby on RailsЗащо Ruby on Rails
Защо Ruby on Rails
Stefan Kanev428 views
WindowsユーザのためのはじめてのPerlプログラミング by Yosuke HASEGAWA
WindowsユーザのためのはじめてのPerlプログラミングWindowsユーザのためのはじめてのPerlプログラミング
WindowsユーザのためのはじめてのPerlプログラミング
Yosuke HASEGAWA2.3K views
Что такое ASP.NET MVC? by Dima Pasko
Что такое ASP.NET MVC?Что такое ASP.NET MVC?
Что такое ASP.NET MVC?
Dima Pasko1.5K views
Erlang with Regexp Perl And Port by Keiichi Daiba
Erlang with Regexp Perl And PortErlang with Regexp Perl And Port
Erlang with Regexp Perl And Port
Keiichi Daiba1.2K views
[Erlang LT] Regexp Perl And Port by Keiichi Daiba
[Erlang LT] Regexp Perl And Port[Erlang LT] Regexp Perl And Port
[Erlang LT] Regexp Perl And Port
Keiichi Daiba971 views
OpenSPARC by clairbee
OpenSPARCOpenSPARC
OpenSPARC
clairbee790 views

More from mayperl

‎Тестирование в проекте REG.RU‎ by
‎Тестирование в проекте REG.RU‎‎Тестирование в проекте REG.RU‎
‎Тестирование в проекте REG.RU‎mayperl
730 views63 slides
Use Perl like Perl by
Use Perl like PerlUse Perl like Perl
Use Perl like Perlmayperl
658 views41 slides
Anyevent by
AnyeventAnyevent
Anyeventmayperl
875 views23 slides
Perl + nginx = ♥‎ by
Perl + nginx = ♥‎Perl + nginx = ♥‎
Perl + nginx = ♥‎mayperl
875 views67 slides
Browser sniffing в 21 веке‎ by
Browser sniffing в 21 веке‎Browser sniffing в 21 веке‎
Browser sniffing в 21 веке‎mayperl
681 views67 slides
А у нас Perl 6 в production :) by
А у нас Perl 6 в production :)А у нас Perl 6 в production :)
А у нас Perl 6 в production :)mayperl
620 views24 slides

More from mayperl(17)

‎Тестирование в проекте REG.RU‎ by mayperl
‎Тестирование в проекте REG.RU‎‎Тестирование в проекте REG.RU‎
‎Тестирование в проекте REG.RU‎
mayperl730 views
Use Perl like Perl by mayperl
Use Perl like PerlUse Perl like Perl
Use Perl like Perl
mayperl658 views
Anyevent by mayperl
AnyeventAnyevent
Anyevent
mayperl875 views
Perl + nginx = ♥‎ by mayperl
Perl + nginx = ♥‎Perl + nginx = ♥‎
Perl + nginx = ♥‎
mayperl875 views
Browser sniffing в 21 веке‎ by mayperl
Browser sniffing в 21 веке‎Browser sniffing в 21 веке‎
Browser sniffing в 21 веке‎
mayperl681 views
А у нас Perl 6 в production :) by mayperl
А у нас Perl 6 в production :)А у нас Perl 6 в production :)
А у нас Perl 6 в production :)
mayperl620 views
Что будет с Перлом? by mayperl
Что будет с Перлом?Что будет с Перлом?
Что будет с Перлом?
mayperl649 views
Использование WebMoney в Perl‎ by mayperl
Использование WebMoney в Perl‎Использование WebMoney в Perl‎
Использование WebMoney в Perl‎
mayperl767 views
Вебклуб Perlgolf.ru by mayperl
Вебклуб Perlgolf.ruВебклуб Perlgolf.ru
Вебклуб Perlgolf.ru
mayperl523 views
Работа с большими файлами под перлом‎ by mayperl
Работа с большими файлами под перлом‎Работа с большими файлами под перлом‎
Работа с большими файлами под перлом‎
mayperl783 views
Сравнение работы алгоритмов сортировки, реализованных на Perl by mayperl
Сравнение работы алгоритмов сортировки, реализованных на PerlСравнение работы алгоритмов сортировки, реализованных на Perl
Сравнение работы алгоритмов сортировки, реализованных на Perl
mayperl854 views
Курс Perl в УрГУ by mayperl
Курс Perl в УрГУКурс Perl в УрГУ
Курс Perl в УрГУ
mayperl813 views
Ведение документации в perl6: POD, да не тот ! by mayperl
Ведение документации в perl6: POD, да не тот !Ведение документации в perl6: POD, да не тот !
Ведение документации в perl6: POD, да не тот !
mayperl840 views
Making Your Own CPAN by mayperl
Making Your Own CPANMaking Your Own CPAN
Making Your Own CPAN
mayperl743 views
Распределенная обработка потоковых данных by mayperl
Распределенная обработка потоковых данныхРаспределенная обработка потоковых данных
Распределенная обработка потоковых данных
mayperl714 views
Написание DSL в Perl by mayperl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
mayperl924 views
10.000 вариантов снять квартиру или сам себе POE-риелтор by mayperl
10.000 вариантов снять квартиру или сам себе POE-риелтор10.000 вариантов снять квартиру или сам себе POE-риелтор
10.000 вариантов снять квартиру или сам себе POE-риелтор
mayperl557 views

Recently uploaded

CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T by
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TShapeBlue
56 views34 slides
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesShapeBlue
119 views15 slides
Five Things You SHOULD Know About Postman by
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About PostmanPostman
40 views43 slides
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...ShapeBlue
88 views20 slides
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueShapeBlue
131 views23 slides
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
74 views18 slides

Recently uploaded(20)

CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T by ShapeBlue
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
ShapeBlue56 views
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by ShapeBlue
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates
ShapeBlue119 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman40 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue88 views
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
ShapeBlue131 views
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue74 views
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ... by ShapeBlue
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...
Backup and Disaster Recovery with CloudStack and StorPool - Workshop - Venko ...
ShapeBlue77 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue46 views
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays40 views
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue91 views
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De... by Moses Kemibaro
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Moses Kemibaro29 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn28 views
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue by ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
2FA and OAuth2 in CloudStack - Andrija Panić - ShapeBlue
ShapeBlue50 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue96 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue65 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue102 views
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson133 views

Groovy Vs Perl

  • 1. Groovy vs. Perl: можно скриптовать. Почему захотелось groovy? www.ivis.ru он же www.eastview.com - это коллектор периодических изданий. Всё сделано на Java, и только скрипты обработки данных из газет, журналов и новостных лент — на Perl.    
  • 2. Захотелось моноплатформенности. Groovy понравился, но испугались, потому что: 1) очень много скриптов переписывать с Perl-а; 2) год назад Groovy казался слишком молодой технологией. Но за год Groovy шагнул с версии 1.5.6 до 1.6.3. А в нём лучше regexp-ы.    
  • 3. Groovy — это  написанный на Java  объектно-ориентированный  скриптовый язык,  компилируемый в байт-код,  исполняемый на JVM. На Groovy написан Grails -   RoR-подобный web-фреймворк.  
  • 4. Достоинства Groovy. Тесная интеграция с Java: - прямо в Groovy скриптах можно писать Java-код, потому что GDK - это расширение JDK; - из java-кода можновызывать код groovy; - из groovy-кода можно вызывать код скомпилированных классов java.    
  • 5. Существует 4 способа запускать groovy, если не счиатать web-приложения: а). сохранить скрипт в файле и запустить из командной строки >./script.groovy привет >cat script groovy #!/usr/bin/env groovy println 'привет'    
  • 6. б) скомпилировать в java-класс и запускать с помощью java > groovyc script.groovy                 > ls *class script.class > java ­cp $GROOVY_HOME/embeddable/groovy­all­1.6.2.jar:. script привет    
  • 7. в) выполнять код groovy с помощью groovy shell >groovysh Groovy Shell (1.6.2, JVM: 1.6.0_07) Type 'help' or 'h' for help. ------------------------------------- groovy:000> class ФИ { groovy:001> def Фамилия groovy:002> def Имя groovy:003> def какТебяЗовут(){ quot;Меня зовут ${Имя} ${Фамилия}quot; } groovy:004> } ===> true groovy:000> Дизайнер = new ФИ (Фамилия: quot;Ивановquot;, Имя: quot;Иванquot; ) ===> ФИ@652110 groovy:000> Дизайнер.какТебяЗовут() ===> Меня зовут Иван Иванов groovy:000>    
  • 8. д) выпонять код в groovyConsole    
  • 9. е) делать всё, что надо, прямо из командной строки, как в Perl: inline scripting. е.1) ключ -e - исполнение кода, записанного в командной строке: > groovy -e quot;println 'Hi, YAPC'quot; Hi, YAPC > groovy -e quot;println 'Hi, ' + args[0]quot; YAPC Hi, YAPC > groovy -e quot;println 'Hi, ' + args.join('::') + ' 2009'quot; > YAPC Russia   Hi, YAPC::Russia 2009  
  • 10. е.2) обработка каждой строки из входного потока: переменная line и ключ -n (вместе с -e) > cat test2.txt строка в нижнем регистре > cat test2.txt | groovy -n -e 'println line.toUpperCase()' СТРОКА В НИЖНЕМ РЕГИСТРЕ > cat test2.txt | groovy -n -e > 'k=0; line.split(/s+/).each{ println quot;${++k} quot; + it; }' 1 строка 2в 3 нижнем   4 регистре  
  • 11. е.3) обработка каждой строки из STDIN (в переменной line лежит очередная строка ) и печать обработанных строк в STDOUT: ключ -p (вместе с -e). > cat test3.txt Иваненко Петренко Сидоренко > cat test3.txt | groovy -p -e '(line =~ /енкоb/).replaceAll(quot;iвquot;)' Иванiв Петрiв  Сидорiв  
  • 12. е.4) обработка файла «in place' с созданием резервной копии (.bak) исходного файла: ключ -i (-p -e). > cat test3.txt Иваненко Петренко Сидоренко > groovy -p -i .bak -e '(line =~ /енкоb/).replaceAll(quot;iвquot;)' test3.txt > cat test3.txt Иванiв Петрiв Сидорiв > ls test3*   test3.txt test3.txt.bak  
  • 13. Структуры даных (Collections)  Массивы (Lists) — на основе ArrayList  Хэши (Maps) — на основе HashMap Для массивов определено много разных методов: grep, sort, pop, push, remove, intersect, disjoint, removeAll, findAll, isCase, max, min, every, any, join, ...    
  • 14. Массивы myList = ['a', 'bc', 3] assert myList.size() == 3 assert myList[1] == 'bc' assert myList.reverse() == [3, 'bc', 'a'] // из диапазона делаем массив diap = (1..10).toList() assert diap[4] == 5 myList.push('u'); myList.push('v'); myList.push('w'); assert myList == ['a', 'bc', 3, 'u','v','w'] assert myList[1..3] == [ 'bc', 3, 'u' ] assert myList[2, 4] == [3, 'v'] top = myList.pop()     assert top == 'w'
  • 15. Массивы (продолжение) yapc = [] yapc += 'Шитов' // добавляем элемент assert yapc == ['Шитов'] yapc += ['Капранов', 'Закиров'] assert yapc == ['Шитов', 'Капранов', 'Закиров'] yapc << 'Серёжкин' << 'Mons' assert yapc == ['Шитов', 'Капранов', 'Закиров', 'Серёжкин', 'Mons'] assert yapc - ['Капранов', 'Закиров'] == ['Шитов', 'Серёжкин', 'Mons'] assert yapc*2 == ['Шитов', 'Капранов', 'Закиров', 'Серёжкин', 'Mons',     'Шитов', 'Капранов', 'Закиров', 'Серёжкин', 'Mons']
  • 16. Массивы (продолжение) то, что в perl: map то в groovy: each > perl -e 'print quot;$_nquot; for map { $_ + 7 } (1,2,3);' 8 9 10 > groovy -e '[1,2,3].each{ println it + 7 }' 8 9 10    
  • 17. Массивы (продолжение) то, что в perl: split, то и в groovy: split > perl -e 'print quot;$_nquot; for split(/, / ,quot;Вася, Петяquot; );' Вася Петя > groovy -e quot;s ='Вася, Петя'; s.split(', ').each{ println it }quot; Вася Петя    
  • 18. Массивы (продолжение) что в perl grep, то и в groovy grep > perl -e 'print quot;$_nquot; for grep { /шка$/ } qw(шишка ёлка);' шишка > groovy -e quot;['шишка', 'ёлка'].grep(~/.*шка$/).each{println it}quot; шишка В groovy имеется unique > groovy -e '[1,1,1,2,2].unique().each{println it}' 1 2    
  • 19. perl sort и groovy sort похожи > perl -e 'print quot;$_nquot; for sort {$a <=> $b} (111,10,11,1,2,5);' 1 2 5 10 11 111 > groovy -e '[111,10,11,1,2,5].sort{x,y -> x<=>y}.each{println it}' 1 2 5 10 11 111    
  • 20. Сортировка массива замыканием > cat cards_sorter.groovy def cards = ['ace', 'queen', 'jack', 'joker', 'king'] def cardWeight = ['jack': 10, 'queen':20, 'king':30, 'ace':40, 'joker':50 ] def compareCards = { x, y -> if( cardWeight[x] < cardWeight[y] ) return -1 else if (cardWeight[x] > cardWeight[y]) return 1 else return 0 }     cards.sort{ x,y -> compareCards(x, y) }.each{ println it }
  • 21. Результат сортировки массива > groovy cards_sorter.groovy jack queen king ace joker    
  • 22. Хэши (maps) def myMap = [x:1, y:2, z:3] def herMap = [z:3, x:1, y: 2] def hisMap = [э:3, ю:2, я:3] assert myMap == herMap hisMap.putAll(herMap) //добавление одного хэша в другой assert hisMap == [э:3, ю:2, я:3, z:3, x:1, y: 2] assert hisMap.isEmpty() == false assert hisMap.size() == 6 assert hisMap.containsKey('ю') == true assert hisMap.containsValue(1) == true def toSet(list) { new java.util.HashSet(list) } assert herMap.keySet() == toSet(['x','y','z']) assert toSet( herMap.values()  ) == toSet( [1, 2, 3] )  
  • 23. Хэши (maps) - продолжение def myMap = [x:1, y:2, z:3] assert myMap.any {entry -> entry.value > 2} assert myMap.every {entry -> entry.key > 'a'} def mySubMap = myMap.subMap( [ 'x', 'y' ] ) assert mySubMap == [x:1, y:2 ] def greater_then_1 = myMap.findAll{ elem -> elem.value > 1 } assert greater_then_1 == [ 'y':2, 'z':3 ] def f = myMap.find {elem -> elem.value == 1} assert f.key == 'x' assert f.value == 1 myMap.remove('x') assert myMap == [y:2, z:3]    
  • 24. Регулярные выражения в groovy assert quot;32.99quot; == 'Total Amount: $32.99'.find(/(d+).(d{2})/) // захват групп с помощью замыкания def roundedAmount(value) { value.find(/(d+).(d{2})/) { fullMatch, dollars, cents -> return dollars.toInteger() + ( cents.toInteger() > 50 ? 1 : 0 ) } } assert quot;33quot; == roundedAmount('Total Amount: $32.99') assert quot;44quot; == roundedAmount('I paid $44.28 for it')    
  • 25. Регулярные выражения в groovy (продолжение) // чтобы найти все совпадения - findAll def string = quot;Moe Fine, Howard Fine, and Larry Finequot; def stooges = string.findAll(/(w+) Fine/) assert stooges == [quot;Moe Finequot;, quot;Howard Finequot;, quot;Larry Finequot;] // чтобы захватывать группы — используют запыкания def string = quot;Moe Fine, Howard Fine, and Larry Finequot; def firstNames = string.findAll(/(w+) Fine/) { match, firstName -> firstName } assert firstNames == [quot;Moequot;,  quot;Howardquot;, quot;Larryquot;]  
  • 26. Регулярные выражения в groovy (продолжение) foo = 42 str = '''blah #foo# blah''' re = '''(?xm) # to enable whitespace and comments # # a pound sign (w+) # the variable name # # another pound sign ''' finder = str =~ re found = finder[0] out = str.replaceAll(found[0], evaluate(found[1]).toString()) assert out == '''blah   42   blah'''
  • 27. Что читать про groovy 'Groovy in Action', Manning, 2007 Dierk Koenig, Andrew Glover, Paul King, Guillaume Laforge, Jon Skeet 'Groovy Recipes: Greasing the Wheels of Java' Pragmatic Bookshelf, 2008 Scott Davis    
  • 28. * http://groovy.codehaus.org/ - домашняя страница groovy * http://voituk.kiev.ua - блог Вадима Войтюка «Записки искателей» * http://pleac.sourceforge.net/pleac_groovy/index.html PLEAC - Programming Language Examples Alike Cookbook * http://blog.alno.name/2008/06/using-groovy/ - блог Алексея Носкова * циклы статей Эндрю Гловера на ibm.com, например: - 'Практически Groovy: Разметка с помощью Groovy Builders' http://www.ibm.com/developerworks/ru/library/j-pg04125/ - Практически Groovy : MOP и мини-языки http://www.ibm.com/developerworks/ru/library/j-pg09205/    
  • 29. * Про регулярные выражения — blog of Ted Nailed 'Groovy: Don’t Fear the RegExp' http://naleid.com/blog/2008/05/19/dont-fear-the-regexp/ 'Groovy 1.6.1 released with new find and findAll regexp methods on String' http://naleid.com/blog/2009/04/07/groovy-161-released- with-new-find-and-findall-regexp-methods-on-string/