Sidef
view release on metacpan or search on metacpan
SIDEF_ADVANCED_GUIDE.md view on Meta::CPAN
var lines = (1..5).map { "Line #{_}" }
File("out.txt").write(lines.join("\n") + "\n")
```
### Directory Operations
```ruby
# List files in a directory
Dir(".").each { |entry|
say entry if entry =~ /\.sf$/
}
# Recursive file finder
func find_files(dir, pattern) {
gather {
Dir(dir).each_r { |f|
take(f) if (f =~ pattern)
}
}
}
find_files(".", /\.sf$/).each { |f| say f }
```
### File Metadata
```ruby
var f = File("script.sf")
say f.exists # true/false
say f.size # size in bytes
say f.mtime # modification time
say f.is_file # true
say f.is_dir # false
say f.abs_path # absolute path
```
### Pipe and Shell Integration
```ruby
# Run a command and iterate its output lines
Pipe("ls -la").each_line { |line|
say line if line =~ /\.sf$/
}
# Capture output
var git_log = %x(git log --oneline -10)
git_log.lines.each { |line| say line.trim }
```
---
## 15. Perl Module Integration
Any CPAN module can be used directly, making Sidef's ecosystem enormous.
### Object-Oriented Perl Modules
```ruby
# HTTP requests
var ua = require('LWP::UserAgent').new
var response = ua.get('https://api.github.com')
say response.decoded_content
# JSON encoding/decoding
var json = require('JSON')
var encoded = json.encode(Hash(name => "Alice", scores => [98, 87, 92]))
say encoded
var decoded = json.decode('{"x":1,"y":2}')
say decoded{:x} # 1
```
### Functional Perl Modules
```ruby
var posix = frequire('POSIX')
say posix.floor(3.7) # 3
say posix.ceil(3.2) # 4
var list_util = frequire('List::Util')
say list_util.sum(1..10) # 55
say list_util.max(3,1,4,1,5,9,2,6) # 9
say list_util.shuffle([1..10]...)
```
### Using Perl's DBI for Databases
```ruby
var dbi = require('DBI')
var dbh = dbi.connect("dbi:SQLite:dbname=test.db", "", "")
dbh.do("CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT)")
dbh.do("INSERT INTO users VALUES (1, 'Alice')")
var sth = dbh.prepare("SELECT * FROM users WHERE id = ?")
sth.execute(1)
while (var row = sth.fetchrow_hashref) {
say "#{row{:id}}: #{row{:name}}"
}
dbh.disconnect
```
---
## 16. Sorting Algorithms
Sidef makes it easy to implement and compare classic algorithms.
### Quicksort
```ruby
func quicksort(arr) {
return arr if (arr.len <= 1)
var pivot = arr[arr.len / 2]
var left = arr.grep { _ < pivot }
var mid = arr.grep { _ == pivot }
var right = arr.grep { _ > pivot }
[quicksort(left)..., mid..., quicksort(right)...]
}
say quicksort([3, 6, 8, 10, 1, 2, 1]) # [1, 1, 2, 3, 6, 8, 10]
```
### Merge Sort
```ruby
func merge(a, b) {
var result = []
while (a && b) {
result << (a[0] <= b[0] ? a.shift : b.shift)
}
[result..., a..., b...]
}
func mergesort(arr) {
return arr if (arr.len <= 1)
var mid = arr.len / 2
merge(mergesort(arr[0 .. mid-1]), mergesort(arr[mid .. arr.end]))
}
say mergesort([5, 2, 8, 1, 9, 3]) # [1, 2, 3, 5, 8, 9]
```
### Radix Sort
```ruby
func radix_sort(arr, base = 10) {
return arr if (arr.len <= 1)
( run in 1.161 second using v1.01-cache-2.11-cpan-39bf76dae61 )